{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Week4 基础作业\n",
    "\n",
    "> **问题描述**\n",
    "运⾏课上给出的notebook的代码："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import r2_score\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. **对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。**\n",
    "> seaborn.histplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'PDF')"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxU5dn4/881M9kXQlYCZGEJYAAFiaIiiihoFatPrfZxabFqrd39Vdvq8+23i12fVm391talaqXaaq3ViksVRFlUREBlkyUsCYEASUhCyEKWmev3xxw0YCABMnMymev9eg1z5sycOdecmVzcc597rltUFWOMMdHD43YAxhhjwssSvzHGRBlL/MYYE2Us8RtjTJSxxG+MMVHG53YAPZGZmamFhYVuh2GMMRFl5cqVNaqadfj6iEj8hYWFrFixwu0wjDEmoohIeVfrravHGGOijCV+Y4yJMpb4jTEmyljiN8aYKGOJ3xhjoowlfmOMiTKW+I0xJspY4jfGmChjid8YY6KMJX7Ta/LyCxCRHl3y8gvcDteYqBURJRtMZNhRsZ17523s0WO/O3N0iKMxxhyJtfiNMSbKWOI3xpgoY4nfuEM8PToX4IuJtXMGxvSykPbxi0gZsB/wAx2qWiIi6cA/gEKgDLhKVetCGYfpgzTQo/MB3505usePM8b0TDha/Oep6gRVLXFu3wEsUNUiYIFz2xhjTJi40dVzGTDHWZ4DXO5CDMYYE7VCnfgVmCciK0XkZmddjqruAnCus7vaUERuFpEVIrKiuro6xGGaiNfDcwZ2LsCY0I/jn6KqlSKSDcwXkQ093VBVHwYeBigpKdFQBWj6iWM4Z2BMtAtpi19VK53rKuB54HRgj4jkAjjXVaGMwRhjzKFClvhFJElEUg4uAzOBtcBcYLbzsNnAC6GKwRhjzKeFsqsnB3heRA7u5++q+qqILAeeEZEbge3AlSGMwRhjzGFClvhVdStwShfr9wLnh2q/xhhjjs5+uWuMMVHGEr8xxkQZS/zGGBNlLPEbY0yUscRvjDFRxhK/McZEGUv8xhgTZSzxG2NMlLHEb4wxUcYSvzHGRBlL/MYYE2Us8RtjTJSxxG+MMVEm1DNwGdMtVaVy3wEq61toafOTGOdlUGo8Q9IS3A7NmH7JEr9xjaqytaaJJaU17GtpB8DnEToCwZk2M5JiiR92qpshGtMvWeI37vDG8NpHe9i4ez8ZSbHMLM5heFYScT4vLe1+ttU0saKslpyr7mJJaTVTRmbiCU7qY4w5QZb4Tdi1tvsZdPWv2Lh7P2cMT6ekIB2v55OknhDjpTg3lVHZyfz63vt4n1m0tPuZcVIOYsnfmBNmJ3dNWLX7A7ywqpLYQSO4ePwgJg/LOCTpd+bzeqid/yCTh6Wzftd+Fm+qCXO0xvRPlvhN2Kgqr67dze59B6h58W6KslN6tN0ZwzOYkJfGhzvq2bC7IcRRGtP/WeI3YbO8rI6tNU2cMyqL5o1vH9O2U0dmMiQtgQXrq6hragtRhMZEB0v8Jix21DWzdOtexgxK4ZShA455e49H+My4QXg9woINVahqCKI0JjpY4jch19rhZ95HexiQEMP0MdnHfYI2Kc7H1KJMdta3sHandfkYc7ws8ZuQe6u0hsYDHVw4NocY74l95IpzUxmalsA7W2tobff3UoTGRBdL/CakKutbWFvZwMT8NHIHnPgvcUWEqaMyOdAeYHl5XS9EaEz0scRvQsYfUN7YWEVynI/JwzJ67XmzU+IZMyiFDyvq2X+gvdee15hoYYnfhMzayn3sbWxj2ugsYn29+1E7c3gGqspKa/Ubc8ws8ZuQaOsIsGxrLUPSEhiemdTrz5+aEMNJuamsrWygqbWj15/fmP7MEr8JiZXb62hp93P2yMyQlVkoKRhIIKC8v91a/cYcC0v8ptc1tXbwwfY6irKTGTQgPmT7SUuMZVROCmt3NiCxVsLZmJ6yxG963bvb9uIPKGeN6L0TukcyMT+NNn+A5PEzQr4vY/qLkCd+EfGKyAci8pJzO11E5otIqXM9MNQxmPCpa25jXWUD44cMIC0xNuT7y0mNJ3dAPCmTLiVgv+Y1pkfC0eL/DrC+0+07gAWqWgQscG6bfuK9bbV4RTh9WHrY9jkxL42YgbmU7W0K2z6NiWQhTfwiMhS4BHik0+rLgDnO8hzg8lDGYMLHl5bLxj37OXnoABJjwzfVw/CsZPyNdXxUaWUcjOmJULf4fw98Hwh0WpejqrsAnOvsEMdgwmTAmVfiEeHU/PD23nk9QuO6N9hW02RDO43pgZAlfhGZBVSp6srj3P5mEVkhIiuqq6t7OTrT2ypqm0kaO51xg1NJigv/xG6Nq+cTUNiwe3/Y921MpAlli38K8FkRKQOeBqaLyJPAHhHJBXCuq7raWFUfVtUSVS3JysoKYZimNzy4aAuoMqnAnXP1HbU7yB0Qz7rKfVay2ZhuhCzxq+qdqjpUVQuB/wbeUNXrgLnAbOdhs4EXQhWDCY9d+1r454odNK6ZT0p8jGtxjB2cSl1zO7v2HXAtBmMigRvj+H8NzBCRUmCGc9tEsEeXbMOvyr53n3U1jqLsFGK8wjo7yWvMUYUl8avqQlWd5SzvVdXzVbXIua4NRwwmNPY1t/PUe9u59ORc/A1d9tqFTazPQ1F2CqVV+2nrCHS/gTFRyn65a07Ik8vKaWrzc/M5I9wOBQh297T7lc3VjW6HYkyfZYnfHLcD7X4ef6eMc0ZlUTw41e1wAMgdEE9qvI9Ne2x0jzFHYonfHLd/f7CT6v2tfPWc4W6H8jERoSgnhYraZlrabGpGY7piid8cl0BAeXjJVsYNSQ1LMbZjMSonmYBi3T3GHIElfnNcXl+/h63VTdx8zoiQ1ds/XlnJcaQlxlh3jzFHYInfHJeHFm9l6MAELh43yO1QPkVEGJWdws66FivhYEwXLPGbY7airJaV5XV8ZepwfN6++REalZOMApurrLvHmMP1zb9a06c9tHgraYkxXFky1O1QjigjOY6MpFjr7jGmC5b4zTHZXNXI/I/28KUzCsJaevl4jMpJoXLfAfYfaHc7FGP6FEv85pg8smQrcT4Ps88qdDuUbo3KSQag1Lp7jDmEJX7TY1X7D/Dc+zu5smQoGclxbofTrbTEWDKSY9labTNzGdOZJX7TY4+/XUZ7IMBNZ/edH2x1Z0RmMpX1LTS32egeYw6yxG96pLG1gyffLeeisYMozExyO5weG5GVhALbaqzVb8xBlvhNjzz93nYaDnRwcx8qz9ATWSlxpMT7rLvHmE4s8ZtutfsDPPbWNk4fls7EMM+ne6JEhBGZyZTXNtPut1LNxoAlftMDL6/eReW+A32qGNuxGJ6VhD+glO9tdjsUY/oES/zmqFSVBxdtoSg7mfNGZ7sdznEZkpZAvM/DFivaZgxgid90Y0lpDRt27+cr5wzH4+lbxdh6yuMRhmUlBU/werxuh2OM6yzxm6N6ePFWslPiuGzCYLdDOSEjspJp7QgQnzfO7VCMcZ0lfnNEa3fu463NNdxw9jDifJHdUs5PT8TnERKKznA7FGNcZ4nfHNHDi7eSHOfjmsn5bodywmK8HvLTE0ksOgNVdTscY1xlid90afveZl5es4urT88jNT7G7XB6xYisZHypWazd2eB2KMa4yhK/6dIDizbj9Qg3TY3MIZxdGZaVhAb8vLZut9uhGOMqS/zmU3bWt/Dsyh18oSSPnNR4t8PpNQkxXlor1lniN1HPEr/5lIcWbQHglmkjXI6k9zWXvktpVSNlVrvHRDFL/OYQVQ0HeHp5BVecOpQhaQluh9PrmkvfBWD+R3tcjsQY91jiN4d4aPFW/AHl69NGfrwuL78AEen2Egn8DVWMGZRiid9Etb49d54Jq5rGVv62rJzLJgwmPyPx4/U7KrZz77yN3W7/3ZmjQxler5lZnMP9b26mtqmN9KRYt8MxJuysxW8+9siSbbR2BA5p7fdHFxTnEFBYsN5a/SY6WeI3ANQ3t/HE0jIuGZ/LyOxkt8MJqfFDBjAoNd66e0zUssRvAHjsrW00tfn55vT+3dqHYI3+C4qzWVJaw4F2v9vhGBN2IUv8IhIvIu+JyCoRWSciP3XWp4vIfBEpda4ja2aPfqi2qY1H39rGZ8YNYsygVLfDCYsZxYNoaffzVmmN26EYE3ahbPG3AtNV9RRgAnCRiJwB3AEsUNUiYIFz27joT29upqXdz20zR7kdSticMTyd5Dgfr1s/v4lCIUv8GnRw5osY56LAZcAcZ/0c4PJQxWC6t2tfC399t5zPnTqUkdkpbocTNnE+L+eOzuL19VUEAla0zUSXkPbxi4hXRD4EqoD5qroMyFHVXQDOdZfTOonIzSKyQkRWVFdXhzLMiNHT8fR5+QU9fs7/t2Azqsp3zi8KYeR908ziHGoaW/mgot7tUIwJq5CO41dVPzBBRNKA50Wkx7NgqOrDwMMAJSUl1iSj98fTb6tp4pkVFVw3OZ+89MTuN+hnpo3OxucR5n+0h0kFdqrJRI+wjOpR1XpgIXARsEdEcgGc66pwxGA+7XfzNxHr9fCNKBjJ05UBCTFMHp7O/I+saJuJLqEc1ZPltPQRkQTgAmADMBeY7TxsNvBCqGIwR/ZRZQNzV1Xy5SmFZKf0nwqcx2rGSTlsqW5iq03EbqJIKFv8ucCbIrIaWE6wj/8l4NfADBEpBWY4t02Y3TNvI6nxPr56Tv+rwHksLijOAaxom4kuR038IjKv0/Kdx/LEqrpaVSeq6smqOk5V73LW71XV81W1yLmuPb7QzfFaXlbLgg1VfPXcEQxI7B+zax2voQMTKc5NtcRvokp3Lf6sTstXhjIQEx6BgPLzl9eTkxrHl6cUuh1OnzCjOIeV2+uoaWx1OxRjwqK7xG+jafqZF1dXsqqinttnjiYx1oqzQjDxq8Ib622cgYkO3f3lDxeRuYB0Wv6Yqn42ZJGZ4yeeLuvjiy+WwTc9iL+lgatOu5SheXlUbC93IcC+ZezgVIakJTDvoz1cdVqe2+EYE3LdJf7LOi3fHcpATC/SQJfj/ZeX1fLOlr1cNW0iedduiJj6+aEmIlxwUjb/WFFBS5ufhFiv2yEZE1JHTfyquujgsohkOevsZ7QRqLmtgxVldQzLTIrKH2t1Z0bxIOYsLWdJaTUzxw5yOxxjQqq7UT0iIj8WkRqCY/A3iUi1iPwoPOGZ3vLu1lo6AgGmjsx0O5Q+afLwdFLifTa6x0SF7k7u3gqcDZymqhmqOhCYDEwRkf8v5NGZXrG3sZW1lfsYP2QAA22qwS7FeD2cNzqbNzZU4beibaaf6y7xfwm4WlW3HVyhqluB65z7TAR4a3MNMV4Pk4dluB1KnzajOIe9TW28v73O7VCMCanuEn+Mqn5qpgqnnz+6f/kTIcpqmijb28zphel20rIb00ZnEeMV5q2z2j2mf+su8bcd532mD/AHlMWl1aQlxjAhL83tcPq8lPgYpozM5D9rd6Nq3T2m/+ou8Z8iIg0ist+5NBy8DYwPR4Dm+K3aUU9dczvnFGXh9Xx6XL/5tIvH57KjroXVO/a5HYoxIXPUxK+qXlVNVdUU55La6bZ19fRhzW0dLNtWS0FGIsMyk9wOJ2JcWDyIGK/wyppdbodiTMh0N5wzXkRuFZH7nRmx7Df+EWLplr10+AOcU5TV/YPNxwYkxnD2yExeWr3LuntMv9VdV88coARYA1wM3BPyiMwJi8keztrKBk7JSyPdhm8es4vH57KzvoVV1t1j+qnuEn+xql6nqg8BnwemhiEmcwJUlfQLbiYhxsvkwnS3w4lIM627x/Rz3SX+9oMLqtoR4lhMLyitaiQ+bxxnjcggLsaGbx6PAYkxTC3K4mXr7jH9VE9H9RwcyXNyp1E+DeEI0PRcuz/AktIaWndvpnhwqtvhRDTr7jH9WU9H9RwcyePrtGyZpY9ZWV5HY2sHdQv+jKeLssym52YU5xDjFV5aVel2KMb0ulDOuWvCqOFAOyvL6xiVnUzrjnVuhxPxBiTEcO6obF5cXWm1e0y/Y4m/n3i7NFhZY0qRVd/sLZ87dQh7Glp5Z8unqpYYE9Es8fcDO+ta2FTVyKSCgaTG2+/qesv0Mdmkxvt47v2dbodiTK+yxB/hAqosKq0mOc7HpIKBbofTr8THeJl1ymBeXbubplYb1Gb6D0v8Ee6jygaq97cytSiTGK+9nd1y5iPu7pKXXwDA5yYOoaXdz6trrWKn6T+sBEMEa233886WvQxOi6coO9ntcCLDEeYjPtzB+YgnFQwkPz2R5z7YwRWThoY6OmPCwpqIEWxZWS0t7X7OHZWF2PDNkBARPnfqEN7Zspdd+1rcDseYXmGJP0LVNrWxqqKecYNTyU6Jdzucfu2/Jg5BFf79gY3pN/2DJf4Itbi0Gp/Hw5kjTmA6xR72d0e7gowkSgoG8s8VFVbCwfQL1scfgbbVNFG+t5mpRZkkxp7AW3iM/d3R7JrJ+Xz3mVW8s2UvU0babyVMZLMWf4Q5OJ3iwMQYThlq0ymGy8XjcxmYGMOT75a7HYoxJ8wSf4RZVVFPvU2nGHbxMV6uKslj3kd72L3vgNvhGHNCLPFHEE9iGsu21VKYkUihTacYdtdMziegytPLt7sdijEnJGSJX0TyRORNEVkvIutE5DvO+nQRmS8ipc61/dy0h9LO+SIdgQDnjLLpFN1QkJHEOUVZPPXedtr9AbfDMea4hbLF3wHcpqonAWcA3xCRYuAOYIGqFgELnNumG2t27CP55BlMyEtjYKJNp+iW684oYE9DKwvW73E7FGOOW8gSv6ruUtX3neX9wHpgCHAZwbl8ca4vD1UM/YWq8tMX1xFobuD0YTadopumj8lmSFoCf11qJ3lN5ApLH7+IFAITgWVAjqruguB/DkD2Eba5WURWiMiK6urqcITZZ724ehcryuuoX/xX4nw2naKbvB7hS2cW8M6WvayqqHc7HGOOS8gTv4gkA/8CblXVHk/XqKoPq2qJqpZkZUVvn3ZzWwe/emU944ak0rjmdbfDMcC1ZxSQGu/jTws3ux2KMcclpIlfRGIIJv2/qepzzuo9IpLr3J8LVIUyhkj34KKt7Np3gB9fOhbUTij2BclxPq4/q5DX1u1hc9V+t8Mx5piFclSPAI8C61X13k53zQVmO8uzgRdCFUOk21HXzEOLtnDpKYM5rdD69vuS66cMIyHGywMLt7odijHHLJQt/inAF4HpIvKhc7kY+DUwQ0RKgRnObdOFX72yARG48zNj3A7FHCY9KZarT8/nhQ93sqOu2e1wjDkmoRzV85aqiqqerKoTnMsrqrpXVc9X1SLnujZUMUSyd7fu5eU1u/jauSMZnJbgdjimC185Zxgi8PBia/WbyGK/3O2D/AHlpy9+xJC0BG4+Z7jb4ZgjyB2QwBWnDuXp9yqoqLVWv4kclvj7oKeXb2f9rgbuvHgMCbE2fLMvu/WCUXg88JvXuq9yakxfYYm/j9nX3M7dr23k9GHpXDI+1+1wTDcGDYjn5qnDeXFVJR9sr3M7HBMh8vILejQXRuf5n3uT1ePvY+5bUEp9Szs/vrTYJkGJEF89dwRPLa/g5y+v59lbzrT3zXRrR8X2Hs2FAaGZD8Na/H3I5qr9/HVpGf99Wj5jBw9wOxzTQ0lxPm6bMYqV5XW8una32+EY0y1L/H2EqvKjF9aRGOvl9pmj3A7HHKMrS/IYnZPCL/+znpY2v9vhGHNUlvj7iFfW7OadLXu5/cLRZCTHuR2OOUZej/CTz46loraF+xaUuh2OMUdlib8PaGrt4Ocvf0RxbirXTu79EzkmPM4ckcFVJUP585KtrN25z+1wjDkiS/x9wP1vbmbXvgP87PKxNp1ihPs/FxeTnhTLbc+s4kC7dfmYvskSv8u2VDfyyJKtXHHqUCYVWD2eSDcgMYbffP5kNu7Zz902tt/0UZb4XaSq/GTuOuJ9Xu6wejwRqavx2NPH5NCw8iUeeWsbiaPPCtlYbGOOl43jd9Fr6/awpLSGH80qJivFTuhGoiONx+7wB/jX+zuJ+fwPuaokj19+7mQXojOma9bid0lTawd3vbiOMYNS+NKZ1hrsb3xeD5eMzyXG6+Gl1bvwxCW5HZIxH7PE75J75m1iV8MBfvFf4/F57W3oj5LjfVwyPpf9B9rJ/Oz3affbRDqmb7CM44JVFfU8/s42rptcwKSCgW6HY0JocFoC543OJmH4JG79x4d09GLy72m9Fzu/YA5nffxh1u4PcMdza8hKieN7F/V+DQ7T94wbMoBnH/gVL3MjcV4Pd195Cp5eGLbb03ovoaj1YiKbtfjD7NG3trF+VwM//ew4UuNj3A7HhEnDe89z24xRPPfBTv7n+TX4A+p2SCaKWYs/jMr3NvH71zcxsziHi8YNcjscE2bfOr+INn+AP7yxmbrmNn7/hYk234JxhSX+MFFVfvjvtfg8Hn562Vi3wzHhJp6PyzWnTLqUV/UrDJ+/hKrn7iLQVH/IQ4fm5VOxvdyNKE2UsMQfJv96fydLSmu467Kx5A6wOXSjjgYO6Y/fWt3If7xeim9/movH5zIoNf7j+6xP3oSa9fGHQWV9Cz+du47TCgdynRVhM8DwrGQ+P2koqvDPFRW8v70OVev3N+FhiT/EAgHle8+uwq/KPVdO6JXRHKZ/yEmN59rJ+RRmJLGktIYXV++iqbXD7bBMFLDEH0J5+QWknfZZ3t68l4q5v6cgM8nGWZtDxMd4mXVyLueOymL73maeeLecpLHTrfVvQsr6+ENod2MHBdd9jSEDE/j2b+474lys1qcb3USECXlp5Kcn8vr6PbTO+i7X/2U5d102loIMK/Vgep+1+EOkwx8g85Lv4vUIF5yUYxNwm26lJ8Vy5aSh1M5/kOVltcz43WLufm0jzW3W/WN6lyX+EHlo8VbihozhvNHZJMfZFyvTMyLC/vdf4s3bp3HJ+Fzuf3Mz0+9exNxVldb9Y3qNJf4Q+LCint+/vomm9YsZPSil+w2cMd7dXUz0yEmN53dfmMCzt5xJZkos337qA656aCmrKuq739iYblhTtJfta2nnm39/n+yUeLa+9kf45o3db3TYGO8jsXMB0aekMJ0XvnE2z6yo4J55G7nsj2/zXxOH8L0L7bNgjp+1+HuRqvL9Z1exe98B7r9mIoHWJrdDMv2A1yNcfXo+b94+ja9PG8HLa3Yx/Z6FDDj7Wto6rNSzOXaW+HvRnHfKeG3dHn5w0Rgm5lu5ZdO7UuJj+P5FY3jjtnOZUTyItClXM2dpGesq9xGw/n9zDKyrp5es3lHPL1/ZwAUnZXPT1GFuh2NOVKfaOn1137GDxzDxG/fz+voqPqyo55yiLPLSE8MQoIl0IUv8IvIYMAuoUtVxzrp04B9AIVAGXKWqdaGKIVwaDrTzzb9/QGZyLHdfeYqdiO0P3Dzvcgz7vqpkKKVVjby1uYbnPtjJsMwkpo7MZGBSbO/HZfqNUHb1PA5cdNi6O4AFqloELHBuR7RAQLn9mVXsrG/hD9dMJC3R/uBM+IgIo3JS+NIZBUwZkcHOuhaeXFbOwo1VtLT73Q7P9FEha/Gr6mIRKTxs9WXANGd5DrAQ+EGoYgiH+xaUMu+jPfzfWcVMKkh3OxwTpXxeDyWF6RQPTuXdrbWs3rGPDbv3c/qwdPBYj645VLhP7uao6i4A5zr7SA8UkZtFZIWIrKiurg5bgN3pPM9p4uizuG9BKY1r5nPT1OE27t64LjHWx/Qx2VwzOZ9BqfEsKa1h8E1/4tW1u+wHYOZjfbYpoKoPAw8DlJSU9JlP7MF5TmsaW3lmRQUZSXFc8e1b8N369U891sbdG7dkJsdx+cQhlO1t4p+vl3PLk+9z7qgsfnbZOPIz7ARwtAt3i3+PiOQCONdVYd5/r2hp9/PiqkpifR5mnZyLz2OjYk3fVJiRxK7HvsWPZhWzoqyWGb9bxB/f3Gzj/6NcuDPWXGC2szwbeCHM+z9xHi//WbOLpjY/s8YPJsnq8Ji+TgPccPYwXr/tXM4bnc1vX9vIrD8sYXlZrduRGZeELPGLyFPAUmC0iOwQkRuBXwMzRKQUmOHcjhiqSvrMr1NR18L0MdkMGhDf/UbG9BG5AxJ48IuTeHR2CU2tfq58cCk/eHY1+5rbgUPPXx3tYvNHRL5Qjuq5+gh3nR+qfYba/W9sJuWUCzm9MJ3i3FS3wzHmuJx/Ug5njsjgvtdLeeStbSzcVMWvPjf+4/NX3bFzV5HPOqd76F8rd3DP/E00rlnAGcNt2KaJbImxPu68+CT+/fUppCXEcsPjK8i4+FZabex/VLDE3wNvb67hB/9azZSRGex99Q82VNP0G+OHDmDut6bwzfNGkjT2PJ5YVs62Gisu2N9Z4u/Ght0N3PLESkZkJfPAdZMgYLMhmf4lzufl9gtHs/uJ24j3eZm7qpJ5H+221n8/Zon/KCpqm5n92Hskxnn5y5dPIzU+xu2QjAmZtt2b+e/T8zitcCAbdu/nyWXb2V7b7HZYJgQs8R9BVcMBrn1kGQfaA/z1hskMTktwOyRjQs7n8XDWiEyuKskjxis8/8FOFm6sot1v4/77E0v8XahrauO6R5ext7GVOTec3rPpE43pRwalxnPN6flMyEtj1Y59/P297ezed8DtsEwvscTvODiG2ROXSPHX7mfjzlq2zPk+E/MHWv0dE5V8Xg/njsricxOH0OFXnllRwdIte63oWz9g76BjR8V2fvOf9bywqpKd9S3MGp/L8Auf/dTjbAyziTZ56Ylcd0Y+izZV815ZLYO+eDeb9uxnVI59E45U1uI/yBvDS6t3saOuhZnFOQzPSnY7ImP6jDifl5nFg4K1qVIymfWHt/jz4q34A32mfqI5Bpb4gQPtfrKv+L+U1zZzwUnZjBlkv8o1pisjspKpfOwbnDsqi1+8sp6r//wuFTbyJ+JEfeI/0O7nK39dQXzhBGaclMPYwQPcDsmY3uXM4dvdpacCLft5ZPZp1Lx8L+9u2MGUn71MyikzraZPBInqPv6WtmDSf3tLDXtf+T3FFzzgdkjG9L7enj+40/M1tLQzf/0ePJ/5DiVf/B/OH5P9ccVaOx/Wd0Vti7+xtYMb5yzn7S013HPlKTStfXAv/DsAAA/qSURBVMPtkIyJOKkJMXxu4hDOKcpke20zTy4rp3TPfrfDMt2Iyhb/3sZWvvz4ctZVNvC7qyZw+cQhbodkTMQSESbmD6QgI4nX1u3mlbW7KapqxJuS4XZo5giiLvHvqGvmS4++R+W+Fv78pUlMH5PjdkjG9AvpSbFcVZLHivJalpfVMfimB3lg4RZuOLuQOJ/X7fD6nA5/gLrmdlra/bR1BGj3BxAJjqCK83lIjvOREh+aFB1ViX/Tnv188dFltLT5efLGyZQUWnllY3qT1yNMHpbBmEGp/Onxp/jfVxN4ZkUFP760mGmjs90OzzUtbX5W7ahnZXkd75fXMeSrj/DHhVu63c7nEeKHndrr8URN4l9eVstNc1YQ5/PwzC1n2pBNY0JoQEIM1c//goUbq/jp3HVc/5flTBmZwXdnjGZSwUC3wws5VWXTnkYWbapi0aZqlm+ro82pdzQyO5nWyg2cPbGYgUmxJMX6iPV5iPEKCrS2BzjQ4Wd/Swe1zW2U11X2enxRkfj/tXIHdz63hiEDE/jrDaeTl57odkjGRIVzR2Xx6q3n8MS75TywcDNXPPAO00Zn8fVpIzmtcGC/KoOyr6WdtzfXsGhjNYs2VbO7IVjbaHROCrPPKuDMERmcmj+QtMRY5LZpTP7WV3r0vC/U7+71WPt14g8ElMLLvoNn7IW0lK1iywu/Iv97jW6HZUxUifV5uPHsYVx9eh5z3innocVbuOqhpYwdnMoNU4Zxycm5xMf07jmAvPwCdlRs7/ZxQ/Pyqdheflz7CASUdZUNH7fq399ejz+gpMb7OLsok2mjspk6KpPcAX2vsm+/Tvw/fGEtnrEXMm5wKtPOuwLvjZ8/4mNtzLExoZUY6+Nr00Zw/VmFPP/BTh57exu3/XMVP567jovGDeLyCUM4Y3g6Pu+JjzIPxfzBB9r9rKqoZ0V5HSudy76W4ET1Jw8dwNenjeDcUVlMyEvrldcQSv068X+hJI/7f/F/mP7L3/arr5TGRLKEWC/XTM7n6tPzWLplL89/sJNX1+7m2ZU7SInzcdbIDKYWZXFaYTojspLCnkSb2zqorG9hS3UTm3bvZ+Oe/Wzas5+t1U10OLWJRmYn85lxg5g8PJ2pRVlkJseFNcYT1a8T/yl5aexf+SIid7sdijHmMCLCWSMzOWtkJj+7fBwLNwa7TBZvquG1dXsAiI/xcFJuKkXZyeQNTCQvPZGslDhS42NITfCRGh9DcrwPjwgeoVMDT2j3B4dIdgSUDr/SEQjQ3qEc6PDT0u6ntT1A2rmzufO51dQ0tlFZ30JlfQt1ze2HxJmXnsDonBQuOCmHU/MHMqlgIAOTYsN8tHpXv078xpjIEB/j5aJxuVw0LhdVZVtNE6t21LNmRwNrK/excGM1Vftbe/x8BT94kT/1YLhk6mmX88Qbqwi0NNDRUI2/ofrj6/a6StprtlPefoCyvHweOc5zAX2RJX5jTJ8iIgzPSmZ4VjL/NfGT9Qfa/aTkFvKdP71Ea4ef1o4ArR0B2joCqCoKKMF/5j35By65/tvEeDx4vYLPI/g8wSGTCTFe4p3LHRef1OvnAiKBJX5jTESIj/HSsXcHQwZ2P0rmn28/RcmPfxL6oCJU3z71bIwxptdZ4jfGmO70cE6DSJmDwLp6jDGmO709p4HLrMVvjDFRxhK/McZEGevqMcaEhtMv3hNeXwz+jvbuH9jXHcNrdpMriV9ELgLuA7zAI6r6azfiMMaEUA/7xSHYN94v+tAj5FxA2Lt6RMQL/BH4DFAMXC0ixeGOwxhjopUbffynA5tVdauqtgFPA5e5EIcxxkQlUdXw7lDk88BFqnqTc/uLwGRV/eZhj7sZuNm5ORro2XfGvisTqHE7iD7Ejscn7Fgcyo7HoU7keBSoatbhK93o4+/qzMen/vdR1YeBh0MfTniIyApVLXE7jr7Cjscn7Fgcyo7HoUJxPNzo6tkB5HW6PRTo/UkljTHGdMmNxL8cKBKRYSISC/w3MNeFOIwxJiqFvatHVTtE5JvAawSHcz6mquvCHYcL+k23VS+x4/EJOxaHsuNxqF4/HmE/uWuMMcZdVrLBGGOijCV+Y4yJMpb4Q0BEHhORKhFZ22lduojMF5FS53qgmzGGi4jkicibIrJeRNaJyHec9dF6POJF5D0RWeUcj58666PyeEDw1/wi8oGIvOTcjuZjUSYia0TkQxFZ4azr9eNhiT80HgcuOmzdHcACVS0CFji3o0EHcJuqngScAXzDKdERrcejFZiuqqcAE4CLROQMovd4AHwHWN/pdjQfC4DzVHVCp7H7vX48LPGHgKouBmoPW30ZMMdZngNcHtagXKKqu1T1fWd5P8E/8CFE7/FQVW10bsY4FyVKj4eIDAUuAR7ptDoqj8VR9PrxsMQfPjmquguCyRDIdjmesBORQmAisIwoPh5O18aHQBUwX1Wj+Xj8Hvg+EOi0LlqPBQQbAfNEZKVTtgZCcDysHr8JCxFJBv4F3KqqDZFQszxUVNUPTBCRNOB5ERnndkxuEJFZQJWqrhSRaW7H00dMUdVKEckG5ovIhlDsxFr84bNHRHIBnOsql+MJGxGJIZj0/6aqzzmro/Z4HKSq9cBCgueDovF4TAE+KyJlBKv0TheRJ4nOYwGAqlY611XA8wSrGff68bDEHz5zgdnO8mzgBRdjCRsJNu0fBdar6r2d7orW45HltPQRkQTgAmADUXg8VPVOVR2qqoUES7e8oarXEYXHAkBEkkQk5eAyMBNYSwiOh/1yNwRE5ClgGsFyqnuAHwP/Bp4B8oHtwJWqevgJ4H5HRM4GlgBr+KQf938I9vNH4/E4meAJOi/BhtczqnqXiGQQhcfjIKer53ZVnRWtx0JEhhNs5UOwG/7vqvqLUBwPS/zGGBNlrKvHGGOijCV+Y4yJMpb4jTEmyljiN8aYKGOJ3xhjoowl/gglIioiT3S67ROR6oMVDo/heRaKSImz/MrBMebhJCLXi8j9Id7HlU6F0DdDuZ9IIyJ3icgFx/D4ws5VZzutn3asnz3jHivZELmagHEikqCqLcAMYOeJPKGqXtwrkfVNNwJfV9U+kfhFxKeqHW7Hoao/cjsGE37W4o9s/yFY2RDgauCpg3c4vwJ8TESWO7XOL3PWJ4jI0yKyWkT+ASR02qZMRDKd5X87haLWdSoWhYg0isgvnHry74pITueARMTjPE9ap3WbRSRHRC4VkWVOPK8fvq3z2MdF5POd99dp+XvO61l9sI59F9tf7dQzXysi/+us+xFwNvCgiPz2sMeLiPzWefwaEfmCs/5PIvJZZ/l5EXnMWb5RRH7utHzXi8ifnWM0z/klLiIyQkRedY7fEhEZ0+m13et86/jfw+KIF5G/ODF8ICLnOeu9InK3s361iHzLWX+aiLzjvA/viUjK4d+cROQl54dRB9+3e0TkfRFZICJZhx9vEZkkIoucuF+TT8oETHL2sxT4RlfH3ZEsIs+KyAYR+ZtIsCCTiJzvvKY1zmcyzllfJiK/FJGlIrJCRE519rtFRG452vvufL5fduJae/B9Mz2kqnaJwAvQCJwMPAvEAx8S/LXwS879vwSuc5bTgE1AEvBdghPc42zfAZQ4t8uATGc53blOIPiz8QzntgKXOsu/AX7YRWz3AV92licDrzvLA/nkR4M3Afc4y9cD9zvLjwOf7/w6neuZBCedFoINlpeAcw7b72CCv2zMIvht9g3gcue+hQdf52HbXAHMJ/hL2hxn+1yCJQR+6zzmPeBdZ/kvwIVAoXPsJjjrn+l0vBcARZ1e/xudXttLgLeLOG4D/uIsj3HiiAe+RrDOke/g+wLEAluB05x1qc7r/fg4OutfAqZ1et+udZZ/dPjxJlge+h0gy1n/BT75nKwGznWWfwus7SL+acA+YKjz/iwl+J9tPFABjHIe91eChfog+Hn7mrP8O2c/Kc77V3W099153/7caf8D3P6bjKSLtfgjmKquJpiArgZeOezumcAdEiz/u5DgH2A+wT+aJzttv/oIT/9tEVkFvAvkAUXO+jaCf3wAK539H+4fBBMHBBPoP5zlocBrIrIG+B4wtvtXecjrmQl8ALxPMDkWHfaY04CFqlqtwW6UvxF8vUdzNvCUqvpVdQ+wyHmeJcBUCU4a8xGfFMo6k2CCBNimqh86yyuBQglWIT0L+Kdz7B8i+B/JQf/UYHXOruJ4AkBVNwDlwCiCtXwedF4PGvyp/mhgl6oud9Y1aPfdRgE+eR+edPbX2WhgHMGKkB8CPwSGisgAIE1VFzmPe4Ije09Vd6hqgGBDpNB53m2qusl5zBwOfU/mOtdrgGWqul9Vq4EDzrfGI73va4ALROR/RWSqqu7r5vWbTqyPP/LNBe4m2OLK6LRegCtUdWPnBzvfvo9ap8PpHrgAOFNVm0VkIcH/OADa1WliAX66/gwtBUY63QmXAz931v8BuFdV5zr7+EkX23bgdEE6XQWxnV7Pr1T1oaOFfrTXdSzbqOpOCU5xdxGwmGBL+yqC30D2S7B+SmunTfwEvx15gHpVnXCE/TUBiMg3gK846y4+SuzCp9+vrtZBp2PniO/iMQd19ZzrVPXMQ1YGk29P67ocfjx8dP+eHNwmcNj2gU7bd/m+i8gkgsfuVyIyT1Xv6mGcUc9a/JHvMeAuVV1z2PrXgG916med6KxfDFzrrBtHsLvncAOAOifpjyE4ZWKPOf8xPA/cS7Aq595Oz3vwBPTsrrYl+PV/krN8GcEuiIOv5wanRY2IDJFgzfLOlgHnikimiHgJfhNaxNEtBr7g9KVnEWyNvufctxS41XnMEuB25/qIVLUB2CYiVzpxioic0sXj/qjB6fUmaLAUb+f3ZRTBb2cbgXnALSLic+5LJ1jNc7CInOasS3HuLyNY598jInkES/oe5CHYpQNwDfDWYSFtBLJE5EznOWNEZKwGS0fvk2CxPQ7GeAw2EPwmNNK5/UW6f0866/J9F5HBQLOqPkmw4XPqMcYV1azFH+FUdQfBPvXD/Yzg7EarneRfBswCHgD+IiKrCX4df6+LbV8lmGxWE0wI7x5HaP8AlhPsdz7oJwS7QHY6zzmsi+3+DLwgIu8R7CtvAlDVeSJyErDU+b+sEbiOTrXJVXWXiNwJvEmwpfiKqnZXwvZ5gt03qwi2bL+vqrud+5YAM1V1s4iUE2z1HzXxO64FHhCRHxL8j+tp5/mP5k8ETz6vIdhyv15VW0XkEYJdPqtFpJ1gv/b9zsnMP0jwhHILwW9obwPbCHaDrCXYNXJQEzBWRFYS7Is/5GSoqrY5J3n/n9O94yP4+VkHfBl4TESaCSbiHlPVAyLyZYLvu4/gZ+LBY9j+SO/7SOC3IhIA2gmeCzE9ZNU5jYkCItKoqslux2H6BuvqMcaYKGMtfmOMiTLW4jfGmChjid8YY6KMJX5jjIkylviNMSbKWOI3xpgo8/8D6LjQDKPWidMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.read_csv(\"boston_housing.csv\")\n",
    "df.describe()\n",
    "fig = plt.figure()\n",
    "sns.histplot(df['MEDV'],\n",
    "             bins=30, \n",
    "             kde=True)\n",
    "plt.xlabel(\"Median value of owner-occupied homes\")\n",
    "plt.ylabel(\"PDF\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. **对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。**\n",
    "> pandas.DataFrame.corr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1894c481940>"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEcCAYAAAAoSqjDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd3RUVdu3rz0zSSa9k0ZLoUoJvUpCk2ZBfVGaCIjSUZQiRVSQbqULCtjxQUGloyBFkBJ6h9AJ6SGkTSZT9vfHGTKZFAgwPi+v31xrZa3M2XvfZ599yu6/W0gpceDAgQMHDgBU/9sZcODAgQMHjw6OSsGBAwcOHBTiqBQcOHDgwEEhjkrBgQMHDhwU4qgUHDhw4MBBIY5KwYEDBw4cFOKoFBw4cODgEUQIsVwIkSKEOFlGuBBCzBNCxAshjgshGtrjvI5KwYEDBw4eTVYCne8S3gWoZvl7DVhsj5M6KgUHDhw4eASRUu4CMu4S5Rnga6mwD/ARQoQ87HkdlYIDBw4c/N8kDLhe5PcNy7GHQvOwBh5lDGmX7KbhMb3RO/Yyxeh2yXaztW5LsN1sPd0txW62AGb/HmA3W281SLCbrcGHfexm66sJVe1mi7w8u5nK2XDebraGxXvbzRbAimfMdrM14Ff7tWt/uvqbeFgb9/PNcQ6MHIwy7HOHpVLKpfdxutLy+9DfvH91peDAgQMH/1XMpnJHtVQA91MJFOcGUKnI74rAzYewBziGjxw4cODAfkhz+f8ent+AfpZVSM2B21LKxIc1+v91T2HyjI/ZtecAfr4+/PLtkvtO3+W9flRrWx+DroBfxnxO4skrJeI899kwQuuGYzaaSDh2kXUTlgOgqdMEbe9hoFJh2LUJ/cZVpZ5DHV4D98nzyFv8Aca43QC4DhyDpn4zECqeScvHqNPz9+ilZJwoeX73SoE8vng4zj4eZJy8wt6RizEbTAS1qEXMitHkXE8F4PrGg3B+KerHGqPtNRyVtx+yQI/MzSJ/5UeYLp2xsauqWh33CZ+h+3wGxsO7Eb6BuA4ci/D2A2nGsGsj/P4X3d7tR4220Rh0Bfw8Zgk3T5XMY49PhxNmKaMbxy7yy8QvMRtN1H+mFW2GPAWAl4cZ4aIFkxH9HxvIX/O9jQ2npq1w7fWK8rKZTOQtX4DxzAkAvD9fhdTplFacyQTtxzPgvVdp2LYRep2ehWM+4/LJSyXyNXTOCCLqRiGEIPHyTRa+9Rn5efm4ebox8tPRBIQGog3W8uf3y5j97VrMZuhepyIDm0aUsBV3PZ25O89iNEl8XJ348oVm6I0mXvnPAQpMZkxmSYeqfgzv0Q3n2J6gUmE8sRvjwc225V6xOi7PDEfeTgfAGH8Y4771AGgadkBT53FAooo+S9acWWAoAMC5SVM8ho8ElYr8jRvIW2Vbfs4tW+Ex4BWkWSm/nEULMJw8YRNn4Huv0qBtYwp0ehaM+bSMMhtJpKXMbl5OKCwzdy93hs0dRXCVENz8NAiNE5hNGP7eSsEfP5WwA6CqXA23Nz8kf+UcjEf3KAdd3dH2GoUqpDJIqH59Hq2fbmOXfAEHgIFAqUtAy4XZfkNjQogfgFggQAhxA3gXcAKQUi4BNgJdgXggDxhgj/P+VyoFIUQw8CnQBNADV4A3gGPAOcAZiANekVIahBCxwBgp5ZNCiP7ACqCDlHKbxd6zwBqgh5Sy9CeqHHTv2pHezz/NxGkf3nfaam3r4xcezLyYt6jYIIpuHwzgi+7vloh34pc9rHl9EQDPzxtOw56xkLgK7Usjyf1wPDIjFY8pCzEc3Yv55jXbxEKFtscgjCfjbA4X/LUF47V4XJ8fyK+thhPQMJKmM/uz+cn3Spy/4aSenFm2mau/7qPprAFE9orlwtfbAEjZf44dL39UGDf8SRWuvUdgvH6Jgq2rcY59Ct3yOZjTi801CBXa5wdhPHXIesxsIn/1UszX4sHFFfd3FtKktwsB4cF8HPsmlRpE8fT0gSzpPqVEHo/9sofVbywE4IV5I2jcsy0Hvv2DW9dTWPbiNPQ5eUyNm4f5dgZZ44bgNedzCg7swXzjaqENw/HDGA4oHw51lQg8xrzH7ZH9CsOz33kDmX0bgAZt2xMSHsLImCFUa1CdVz8YysTuY0vka+XUL9Hl6AB4+Z2BdH65G78s/plO/bpy48J1Zr8yneXv1mbm2gMseq4ZQe5O9Pn+b2IiKxDp72E9d76BGdtPs/DZxoR4uZKRpwfAWa1i6f80wc1Zg8FkZtB/9jM8pif6tZ8hs2+h7TMJ08VjyAzbxp85IR79L/Ntb4mHD5oG7cn/agoYDaga9kbbrh35WzaDSoXnqDe4Ne4tzKmp+C76HP3fezBdLVJ+hw+TsddSfhEReL/zHhkDrOXXoG0jQsJDGRkzmGoNavDaB0OZUGqZfVFqmT03ogdXTl/mo6GzWXV4GeZbaejmT8BtzCcYT+7HnHTd1pBQ4fJ0f0xnjtgc1j73GqYzh8hfPhPUGvxCWtglX3MHz+Snq7/1AxYC7UsYKCfSPj0Aiy3Z6x7hEhhutxNa+MeHj4QQAlgL7JBSRkopawMTgSDgopQyGqiLMh72QhlmTgBFC6gnSoXyUDSOrou3l+cDpa3RsRHHflZa7jeOxKP1csOjQskJzAt/WrOZcOwiXiF+qCNqYE65iUxNBJMRw4EdODVoVSKtc4fuGOJ2I7MybY6bzp9AE1ELmZsDQNrhizh7u+NayvmDWtfm2voDAFxavZtKnRuVeU3q8BqY05PRVInCsGsjhoM70dRtBrpc23y1ewbDod3IbGu+5O0MpUIA0OswJ16jZoeGHFmjlNH1I/FoPd3wDCyZx/M7jhb+f+PYRbyD/QC4dvgC+Vm5VIyOwnTjCiovHzAaKfhrO85NW9saydcV/iu0rmVeI0CTjk3Z+fOfAFw4ch53L3d8KviWiHfnIwLg7OLMHd8jUkpcPZRznErJpnJYKBW9tDipVXSqEcyOi7YLCTadS6R9VBAhXkoaPzcXJZ9C4OastMuMZkl4jdrkpycjb6eB2YTx7EHUkdF3vRYbVCrQOIFQIbQumNPSANDUrIUxIQFzYiIYjej/3I5LS9vyk8XLr9h0ZZOOzdhRWGbncCtXmbmApcwqVqvEiT3HiIquhjnpOiovH4SbB8bDu9DUbV7CjlPMkxiP7UXmFHn2ta6oox7D8PdW5bfJSL1W9e2SLwtngaoo36YHw2wu/98jyn9jTqEtYLB0dwCQUh6lyFIqKaUJpetW1nKq3UBTIYSTEMIDiAKOlhH3v4JXsB9ZN9MLf2clZeAVVPJhvINKo6b+c62J33Ec4RuAzLC2vs0ZqQhff5v4wscfp4atKPhzfan2hLcf0mQs/J17MwPXYNvzu/h5YLidhzQpD2BeYgZuReIENoqi2+/TafvtWLyrhyF8ApC6XGR2JtoBY3Bu0w2n5u3BWWuTL02DVhh2bijzWoV/EOpKUajUKm7ftC6zzkrKwCv47mXU4NnWnN9pW997BfkitK4UHN4PgDk9FZV/yZVNTs0ex3v+13hMmkXugtnWAAme736I14dLcen4FH7B/qTfTCsMTk9Kwy/Iv4Q9gGFzR7Es7itCoyqyaaVyLzZ/tZGwqEosPbiCW3U7UYE87nxFgzy0pObobWxcvZVLlt7IoNX76f3dXtadtq6kMpklL367h/afb6d5jXA89FnWbOfcQniWrERVIRFoX5qCy7OjEP6hlriZGOO24jpoNq6DP0Tm5FJwSOlhqgMCMKcWed5SU1EFlCw/51aP47fia3ymzyLrw9k2Yf7B/qTfTC38nZGUjv9dyuyLuK8Jiwpjo6XMrp6+QrMuLfAL9kcaChC+FRA+/pgz0xDexZ59b3809Vpg+GuT7XX7ByNzstD2eQO3cZ/h0mskgWGBdsmXhaZAFZQG6oPx351T+Ef4b1QKdYBDd4sghNACzYDNZUSRwB9AJ5QNG7/ZM4MPRCmLwe7mxa7bBwO4uv8s1w6eKyOx7U/X3sPIX/1F2Q9PqYvRip+/ZKQ7UTJOXGFt0zfY0HES55ZvJWb5aCW6EKgqV8OwYz36X1eCyYhLlxcL02tfHIp+zV3y5aLFbegU8n9cXFgZ3TWLRXh62gAuHzjL1YPnbI4H1aiEKqwSum8+L2KoZHrD/t3cHtmPnFmTcO01sPB41oThZI15lexp43Dp0h1P31J6h2VkbNHYeQxuOoCE+Ou0fOpxAKJjGnDl1GVeazKAgr2/ogoOBycXa6JixW4yS84k32Z+90YsfK4xy/Zf5OotpfelVgl+7NuKLYNiuZ6dT5beaJu4WLbMKdfQffE2+d9MxXB0Oy5PD1MCXNxQR0aj+3ICuqVjEa5aXDp0LD1DpdgFKNizm4wB/bg9ZRIe/QfaBt7H875o7Dxea9qfG/E3aGUps7WLf8Ldy4OXJg5AHVIZ842LcOf5KGbH5blX0f+2suQzplKjqhhJwV8byZvzOuj1d+YCHjpfczd+CjASOAIYSzVQHkyG8v89ovxvTzRHCiGOomzT/klKefwucVcBowBv4C2UIagSCCFew7L2d9FHHzCo312H5e6LJv060qhnWwASjl/CK9TaIvEK9iM7JbPUdDGvP4e7nyc/TvgSAHkrFeFXoTBc5ReIzEy3SaOuWh23oZOUa/LwRlOvKYbHGqGJqAmA6eZ1RAVrx8o91A9dsu359RnZOHm7IdQqpMmMW4gfuuRbABiKdKdvbj+GamZ/ZL4O4eaBvJWK6fJZ1DWjMV06i6pylE2+XF+daM1Xnabkm00Yj+4FtRr3SfMRWndcnupL1l9X8Q71sy0jy/mL0+7153D39+LXwZ/YHA+qWYnGL7bFdPUyMltpRav8AzFnpJVmBgDj6eOogsMQnt7I7NvIW+m4dOmOS8cnUfn4IjLT8A+1tpT9gwPISCl746jZbGbvur94evCz7Fi9jbY92rN20c8AVFAXkHTlBqrmTTCnXCM5J59Adxeb9BU8tPi4OuHqpMHVCRqG+XI+NZsqvu6FcTy1TgTJPHJdvLjTLxMevrbDJwAF+dZ8XT4J7dSg9UBdqQYyKw10ypCifvdunGrXQf/H75jSUlEFFnneAgMxp5ddfoYTx1GHhuH6Yi+07dozV6/m4vEL+IcGAsqCA79g/3KU2W6eGfwcf67ehi5Hx6Kx86jesAZTZ/RCVSEMc0YSmscaI7Ns7agrR+H68jhLGXihrt0YTCZMV84iM9NQV66G9sURCBctGoOTXfIF3JlTuGz5ezAe4WGh8vLf6CmcAsoayL4zpxAFNBdCPF2WESnlAZReR4CUssydOVLKpVLKxlLKxvasEAAOfv07S7pOZEnXiZzdGkf955XWRsUGUeizdeSUUik07BlLVExdfhq5oLAFY7p8DnWFMERAMKg1ODWNxXBkr0267HEvkT22L9lj+2KI24Xum3nkf/UpOe8OIefdIRhPxSHclcnMgIaRFGTloSvl/Ml7TlP5yaYARPR4nBtbDgOgDbRuSPKPjkCoBKYzh1H5VcCcnYkqtApOTWLAbMKcaJ0Az5nQr/DPcHg3+d/NVyoEQPvymxhPHSJnXG9ypw7lzNY4GjynlFElSxllp5bMY+MXY4lqU48fR863aeV5h/rTZ8lofhw5H5VfAKoKwaDR4Ny6HYaDe2xsqIKtFaQ6ohpCo1Emll20oHVFv+kXsiaMwJScyOHtccQ8r1Tu1RpUJy87l8yUkpVVcBXrxsBGHZqQcPEGAGkJqdRtVQ+Ax8IrcjUxmevXrmEwmdlyLonYiAo2dmIjK3Ak4RZGsxmdwcTJpNuE+7mTkVdAdr7SYsw3mvht9378Q8IQXgGgUqOp2QTTpWJTZ25eRa65KggB+TnI7AxUwRGgcQbAqWFDTNeUiWTj2bNowiqiClbKz6VtO/R7bctPHWotP021auCkQffjD9waPIixXd/gwNb9xBaWWQ3ysvPKKDNry71xh6aFZebm5Y7GSUP8sQuoKkViun4RDAY0DdtgPLHfxkbu+4PIff8Vct9/BePRPehXL8Z4Yh8yOxNzZhrGc0fJmzMKQ9wOLh67YJd8WRgE7AKyiqcvL1Kay/33qPLf6ClsB2YIIV6VUi4DEEI0AdzuRJBSJgoh3gYmcPehoQlA/l3C74ux787i4JHjZGZm0b57X4a98hLPP9WpXGkvbD9KtbbRjNr1MQZdAb+OsQ5t9Fk5lt/GLSM7JZMnpw8kMyGNQWvfB+DM5oNwcgm67+bj/tYsZUnq7s2Yb17FOfZJAAp2lD6PcAfXwRPR1KwPzlp6X/uK/NTb7BhgbWG3/WYM+8Z8gS45kyPTV9F68Qiix/Ug4+QV4n/YAUDlJ5tSvV97pNGEMd/A7qELaRlkJv/7BWj7jsJ98kJkXg7CJwDTheM4xXS76zyCOuoxnFt0xHTjEpopii6XfOdnMq6l8ObOTzDo9KwZay2jfivGsXb8UrJTMnl6+itkJqQxxFJGpzYf5M95a2k36jncfD15aurLgMR7/jeYM1LRb9uI6foVXDopbQj9lt9wbtEG59hOYDJCQQE5Hym2VD6+eIz/wJJJNQW7/+Cneet5Zdpg5u9aQoFOz8Ix1pU8E1a+w5JxC8lMvcXwj9/AzcMVhODqmSssm6Rc10/z/sPwj0bx0ZbP8KjgwoQsJ4Z9/xtmKXnmsYpEBniy+phSkfaoX5kIfw9aVg3khW/2oBKCZ+tUJCrAk/Op2UzZchyzlJgldAz3R7X7R5yffwOEwHhyDzL9Jpp6MQAYj+9EU70RmnqxIE1Io4GCDcsAMCddxnThENq+k8FspuDIKXQb1ikXZTaRPf9TfGZ/iFCp0G3aiOnqFbRPKuWXv/43XNq0QduxE9KolF/WtPdt7u/h7XE0bNuIBbs+R6/Ts2jMvMKwiSunsHjcAjJTbzHi4zdw9XBFCMHVM5dZaimzilEVGfnxaMwmM+aUBNRhVXGftBjDvt8xJ13DqVUXAAx7bOcRiqP/aQmu/caAWoM5PYnFfebRa2xfu+QLRWDulbtm4F78C3oK4m7j4HY7iRChKEtSG6F81K+gLEldK6WsY4kjUCaPRwBqbJekNpZSjihmcyWw/m5LUh0yF/eHQ+bi/nHIXNw//2aZC/35v8r9zXGp3vqhz/dP8F+ZU5BS3qT05aZ1isSRQP0iYTssx1eiSMgWt9nfjll04MCBg4fnEZ5ALi//2xPNDhw4cPDv4V8wfOSoFBw4cODAXjzCE8jl5V9dKdhzHmDSoWl2s9Wi7st2s/WWsN+cUIcN+ntHug82PGa/eYDH99ptfQFxc2vbzdaoKfF2syUfXvW4kNvSfvMm05ztOyTS+xf7zQN83eSBFwr9Mzh6Cg4cOHDg4A6KOMP/bRyVggMHDhzYC8fw0f89Hkbu+m48iAz3mGmv06p9c/J1et57YwbnTpRcRvjupxNp2KI+OVmKLML7b8zg/Kl4Yjq15p2PxuPp4Y40m4mbtJLLq3aVSO9eKZCWi0fgYpHO3jdyEWaDtTXjVz+CjuvfZ++Q+bDhBs4uzvy6/0c8vT2QwIbVm5k17qMSdqd88jYNW0STk51jydcsLpyKp9OzHeg3vDcAvu7qQrlr3aYN6H4sJtfcohXu/RW5a2mRazaeUuSaPd4aj0uzFpgzb3HrNUUReML0N2nTviU6XT6TRk3jzAlbOQyA6Z+9Q+OWDcnJUvI1adRUzp66wIBhfXnyeWUPyoFrZ5jx2SJMWWk8W78KA1vWKGHn4NVU5m49jtFsxtfNhS9fagNAVn4BUzccJj41C4HAW1TAS7rT890B1G3bkAKdnhVjFnLtVMlNsS/PHkqVehEIBMmXE1kxZiH6vHyCI0PpP3c4lR8LZ+2HP+AfGkDdtg0o0BWwfMyCMm1VrReJQJB0+aaNrQFzh1P5sQh++PBbAkIDH1oiPDwsAJWXOypnJ8x5+WT+ZwvpS1fb3suIioTMGo32sShSP/6KjC/XFIb59e+OzwudkFKiP38Fp9GfMWDiABq1bYxep+eztz7l4smLJfJ1h9feH0yHFzrwQq0eAFSMrMjrH75BZJ1ITLu24FS7HqjU6LdtQL+2mKR6k1Zoew0Es1Qk1VcswHRWecaEmwduw8airhx+R2qjBfB3mRkpD6YHV8h4VHikKgWLJHZx/el6KPKwi4BRUsr5lrgLgDjLktVy8VBy1/fgfmW4W7VrTqWIijzbshd1GtZmwqy36N9tcKlx501dzLYNO2yOqdQqTh07y7W+86n6XEuafvhqqZVC9KSenFu2iWu/7qPxrIFE9Iol3iKdLVSC6Ek9SdphVRdp3KoB8WcuMrLXGOo1qcO87z9k/apNnDx8umS+pi1m+4adNsduXk9kyPOjyM3OY8+xnzDfyiBz5BB8F3xOwd97CnfZAhQcOUzB3xa55vAIvCa/x61XFLlm/dZN5P+6Bs9xiqTG4+1bUiW8El2a/w/1GtVhypxx9OpS+j6jj96fz9b1222OrVj0LSsWfYtEEhIl+HLeR/gdX0ef5X8SUy2EyEDrTuGs/AJmbj7Kwp6tCPF2IyPXOp8xZ+txWkYE8eHzzTGYzLz+/gXqxDagQngIk2JHEtGgGn2mv8rM7iVVWH6ctpJ8i7zIC5Nfpu3Lndm8+BdyM3NY9d5yop9oQnBkGL7Bfky02Oo7/TVmdJ9wT1vtXu7MJoutH95bTu0nGhMWWRG/YL+Hlgh3Hz6VyG1fIlycudhhEOGrPiR7+z4K4q1y16bMbJKnLcGzQwsb25ogf3z7Pc2lLkOQ+gLCPptAv3H9CK0ayuA2r1GjQQ2GTh/GmGfeKvVeRtWLwsPb3eZYdmY2S9/9nBadW/D8y53IHj8Ec3oqnrOXYDhYTFL9xOHC3e/qKhG4v/UeWaOUZ8x14AgMRw6Q++G7oNHg++Mftk5DHoT78Lz2qPJIeV6TUq6VUkbf+UOpCHYDW4AU4HUhhPOD2n8Yuet7cb8y3DGdW7NxtaL/d/LwaTy9PPCvULq6Y2m0iG1amD77agqoBNpSpbMf47pFOvvy6l1U7Ny4MKz6wE5c33iQ/DTrZF2bTq1Z96Oyq/TcyQuoNWq8fMp/XSfiTpF9O4fHGtTCdO0KKh9F7jp/x3acW5Zf7tpw4jjm7OzC3+06t+G31Uq+jh86iaeXJwH3UV6FqE1UrlyZ0IIUReq6dkV2nLf1V7Dp5HXa1QglxFvZdO/nrqgR5egNHL6WxrPRVQFwUqvQoCb6iSbsW6NUjpeOXMDN0x3vUiTC84voTTlpnQuF4LLTs7hy/CImo4mw6pX4e82OIrbc7mnLWetcqCl3x5bRYKRS9cp2kQh3rVcdY2IqpltZoNOTtWEXnu1tP/6mjNvkn7iANJb8KAqNGqF1BrUK4epCWERFtv+sVNrnjpzD3csd31LypVKpGDBxICtmrLA5fjv9NheOX8A7wAeZdRtzsiIJbvhrO85NiknQF3nGcNFaxfdc3dDUrk/BNssufaMRoHTxsvvBoZL6zyGEqA5MAV4CzEAqsA144KU7DyN3bW8CgwNJumndQZycmEqFkNJ3AA97+1V+2LaSN98fiZOzU2H6kMohdNs1l5ivx5J55rqNLDaAs58HBbdzC9VKdYlWeW3XYF8qdmlM/Nd/2KSpEBxAamIq3/7+BVuO/0JGaga30kp/V4a+PYjv/ljO6PeGF+bLen0Bitz1QYvcdVoq6jLkmn2//BrvD2aRXUyu2SZfIYEkJVh3gicnphAUElhq3FEThrDmz28ZP/WNEvly0qoJrRKB6ariXCvIy5WUbJ1NnKsZOWTlG3jlm130+nI7644rLc8bt3LxdXNhyvpDvPjFNt5ffwgTZnyD/Mgo8lzdSkrHJ7j0hkT/ucP46OAygiND2b6ypKSDq6dbMVsZ+ASXXvkNmDuMjw9+QXBkGNtXbiwR7ubpZheJ8EpfvI9rdE2SP/gcpMSQlIamDDvFMSank/7lGqrt/Ipqe7/DnJ0LSNISi+YrHf9SrrFb/yc58Pt+bpWiZQTg6uGKzLX6+jBnpCL8Sz4TTk1b4zXvazwmziJ3ofKMqYNCkVmZuI14G8+5y3AbOhbAvUTi+8XO/hSEEJ2FEOeEEPEWKaDi4d5CiHVCiGNCiFNCiIf2vvZIVgpCCCfgexSpi6LuyGYBbwkh1A9muOSh8std2xdF1ePeeVkw43Oef7wP/bq8ipePJy8P71OY/si+Y2xoM5bdAz/Bo0qFEunFXSSTG77/Ekenr0Kai51TCMxS0rfjIJ5s1AN3D3dCS5EnXjhzKT0ef4n+XQfj5eNVOI9wh8ia4agrVSJ32d3lrgv27ObWK/3Iem8S7sXlmu9xLaXduk+mL+LJVi/wYqcBePt4MWhEP5vw2vVrIfNzoKBIL6U0qevEWyx4sSWLerVi6V9nuZqejcksOZuUyQsNI/hxUHu0zhquq1NKGigjbwArxy5iTLPBJMYn0PiplqVdaEnKMLZi7CLeavYaifE3aPJUSSdN92PrbhLhiZPnk/X7XoKmDEVlcS50Vw30Iqi8PPBs35z4dgO40KovKlct/sElGwfFn12/ID9ad2vFupXrynWeIoZKHDIc+IusUf3InTNZcdkKoFajjqiOfsuvZI99FanXAZT46N43duwpWL5zC1E0mWoDvYQQxddTDwdOSynro7ju/OhhRlPgEa0UgGnAKSmljeNiKeVlFGc8vUtNhSKdLYSIE0LEHcqJp0m/jgzZOIMhG2eQnZx533LXW6Z9Z5cLAlBpvdD4hPHd78tJTU4jONSqphkUEkhqUnqJNOkpyjFDgYHszGz6Du1ZIn3q/rM4uWsx6Qts0uozsnH2dkeoldvsWkQ6269+OC0Xj+Cp/Z9SpXsLWi4ewS/7VpGWnE6QxW5OVg5ms5mIGuGl5CujMF/rftzEY9E1C8OiakXwTO8nMV0uIncdEIjpXnLNIWEIL6vOjkuHJ1CHhuG75AtSk1MJDrM6xAoKqUBKUmoJO2lFymvtqvXUaWj7DrXt2IbEa9aJ2+QsHYEetkNXQV6utIwMwtVZg6+bC40qB3Au5TZBXq5U8HKlbpgf6hrNGfPh5yxc9wWZyRn4FXmufIP9uZ1ctnyzNJuJW7+XRp0Vj2OxL3Viysa5xPTpSH62rpgtPzLvYevg+rzkhrMAACAASURBVL00tNhq+1JnpmycS8c+ndFl5z2QRHhzi9OZtj3as3/z3xiT0lB7umO4kYxzRCWcggMw3sVOUdxbRmO4kYRXlzaEr/kU7WORaJw1BIQUzZc/GcWuMeKxCEKqhLJ01zK+2PMlLq4ufL5rqU0cXY4O4W5t3Kv8ApH3klQPCkV4emNOT8WcnorpgjKNYPh7J0DDcl3U3bBvT6EpEC+lvCSlLEBxH/BMsTgS8LRox3kAGTyMPwgewUrB4p/5eRRhvNKYAYynjLwXlc5u5BFlN7lre2DOz8KYmUCfjgPZsWk3XXt0BqBOw9rkZOcUVgBFKTrPIAX8tHItfToO5OTh04Xpq/Z4HCkh6/zNEumT95ymkkU6O7xHG25sUfwdrWs+mnXN3mBdsze4+svf7B26gO7NexK35zBP9ewKQIPm9XFyduLM0bOl5Ms6PBLTuTUXzykf2qCwCsz+YhqThr6PKiCgUK5ZG9uucFL5Dqqics1RilyzzLpdeEz/x1ZMNxO4NWQQ2zbt4ukeipJmvUZ1yMnOKawAilJ0nqF9lxjiz1pXtXh4uvN8j+5cTUgiITNXkbo+fYOY6rY9odjqIRy5nm6RujZy4uYtIvw9CfDQEuzlypX0bEzn9rF08giGPjWQo1sP0vw5Rck0okE1dNl53C5FIjywiBR3vfaNSLyobO7b8c0WpnYdy87vfifh/DVaPBd7T1sVitiq374xSRZbf36zmaldx/L7d5u5dv6aXSTCdSfO4xxRCeeoShgSU/Hq1obsbftK2CkNQ2IqrtE1yfz5dy4/PZLcfcc5tf8k7Z5vB0ANi9x18SGiuO1x9Gv8EoNavcKgVq+g1+kZ3OY1mzjpSekIL59CSXWn1u0oiLOVoLeRVA+3SqrLzAzMaSmoQisBoKnbCKDkaor7RJoM5f4rB2EU8VAJ3KCkd8oFQC3gJorb4tflQ+pyP2qrj3yBFUBvKWV2aXGklGeFEKeBJ1F6DeXmoeSu78H9ynDv2fY3rdo355e/V5Gvy+f90TMLwz77dg7T3ppNWnI6Hyx8B19/H4QQnDsVz8xxyuomH18v6jSoTfMrK5FGM3FFls3GfDOWA2OWoUvO5Oj0H2i1eCT1xvXg1smrXLJIZ5fFpXOXqf5YFH9d+QNplqz/zyb++kNZpffJN7OZPmYOacnpTFvwDj7+PggB50/FM2v8xwAMGv0y3r7ejJ3+OiDx+/IbzGmp5G8pRa758TZoOyhy11JfQNYHVrlmz4lTcKoXjcrbG7/vVxMwYyk3rt5k0/6fydflM/l16w7zxd99wpQ3p5OanMacxVMLy+vsyfNMHWudp+jQNZb9ew7zdqf6DP1hD2az5Jn6VYgK9GL1IWWpZo9GEUQEeNEyIogXlm1DCMGz0VWJqqD0YMY/UZ+JvxzEYDYT5uNOJVMFTvx5mLptGzB953wKdAWsHLuw8JyjVkzgq/FLyErNZOBHw9F6uCEE3DhzlW8nK7LXXoE+TP5tFloPV6SUqNRqZu5eiD43nxVjFxXaen3FRFaOX2yxNQKtRQr6+pmrfDt5aRFbsxVbZjNqjZoFu5eiz9M9sER4+K8LAIkAqq76kMyftlIQfw2fXkrjIfOHjagDfAlf+xkqDzcwm/Hr351LXQaTf+wcWZv/IvyXeUiTCf3pSyx9bymD3hnE0t3LlCWpYz4tzNe7K99j/vh5JXoORfEJ9OGT9Z/i5uEGTgKvBd9iTkulYNsGzNev4PyE8owVbP0Np+ZtcIl9QpkAL9CT8/HUQju6L+fh/vpkcNIok9VKg/PhuI8dzUUdgllYKqUs2h0qdQCw2O9OKOrS7YBI4HchxG4p5QNv9f6vSGeXFyHEBGAycKFY0A/AS0VktuujuM0beLclqe9V6WO3i3t0ZS4q283WJ9ywmy2ADY/Zz1bscXvKXLSzm61HV+bCftIUU+0sczFOb0+Zixy72fL9ecdDS1nr/vyi3DfRte2gu55PCNECeE9K2cnyewKAlHJmkTgbgFlSyt2W39uBty1OyR6IR6qnYLnYmWUEzy4S7xiP4NCXAwcO/j/HvtpHB4FqQohwIAHoScn51GtAe2C3ECIIqAGU3KF4HzxSlYIDBw4c/J/GjvsPpJRGIcQIlH1aamC5lPKUEGKIJXwJyqKclUKIEyjDTeOllGXPtpcDR6XgwIEDB/bCzjIXUsqNwMZix5YU+f8m8IQ9z+moFBw4cODAXjiksx9t7OkL2Z6Tw3+f+MputvY8Nt5utnZ+3cNutgD6vLbVbrbiZjSxm62goT/azVbSDPs10kTlqnazVbDmd7vZGrrL696R7oMfx5bcDPmgdJ5lv42lJZXDHgBHpeDAgQMHDgp5hDWNyoujUnDgwIEDe+HoKTzaaOo0Qdt7GKhUGHZtQr9xVanx1OE1cJ88j7zFH2CMU1RUXQeOQVO/GTIrk5x3Xi2M+7A+EIaMG4TGJwwpwZybhjSWdIFZHt8MwskVtbs/zfbNJ/G7bVyb/0uJOFHTB+DfviEmnZ6zoxaSc0LZdazxcqPGx0Nxr1kJKSXnRi8mK+48mqhm7I1PZsaHn2IymXi2aTUGtq1nY3PltsNsjFO67CazmctJt/hzxiC83bVk5emZ+sM24hPTFW0n4cnId0fR0KKbv2DMp1wqRc9/2JyRRNWNAiFIvJzAfIuev7uXOyPmjiKoSggH4g8xfdZszEYDz9arzMDm1UrYOXgtjbnbT2E0mfF1debL3lY9IJNZ0vvrXVTwUBRP58ydwhOdYsnT5TN08FiOHT1Vwt7mrT/i4anIKAQG+nMo7hi9ew6hWvUIFi+ZQ/3oxxAH1mM8bB2qUVWpjXPMCyBUGE/twRi3pYRdVVh1nGN6gEqN1OWg//njwrA9524wZ91+zFLybJPqDIwtVv47T7Dx6CVr+afc5s93eqErMDD5P7tJz9YhhKC7VtIz2Kpuq6nbBO1Lw5V3YcdG9Ovv8i68N5+8BR9gPGg7oNLvvVeIbtuIAp2eJWPmc6WUe/nqnOFE1I0s9M2w5K356POUPSa1mj/GS1NeQRvsgszPRb/mE/ZcTWfu7vOYpaR77VAGNqpawmbcjVvM/es8RrPER+vEl881sgkfNXU4zds1Q6/TM3P0HM6fLL7Nycrr00bQ5cXOdK7+JADunu5Mnj+BoLAKAKeAD1E20D4Yjp6CFSFEjpTSQwhRFbhMGb4PhBArgRggC3AF9gETpJQJRe0UsdsfaCylHCGEqAF8DvgALsBuKaXt3ncrau1LI8n9cDwyIxWPKQsxHN2L+eY121hChbbHIIwn42wOF/y1Bf22X3AbZB2zf1gfCAd2H2Lnlr+UOQW1MxrPChgzS24YK49vBrVHAMbbiRx4fDyNtswkbUsceeettvzaN8A1PIT9zUfi1aga1ee8yuEuisZ/1AcDyPjzCKcGfYRw0qB2VfSz9BfjmPr+cpYM705o3Rb0HD+LmJoViSwiHd6/fUP6t1ckYnaeuMy3O47ibZGWnrNmFy1rVeHDV7piMJr4dHUGIeGhDI8ZTPUGNXjtg6G8XYqe/4qpXxTKN/d/ZyBdXu7G2sU/8/yIHlw+fZlZg2eQFZrIl/M/we/wWvp8vZuYqGAiA6wfvax8AzN/P8HCHs0I8XIjI9e2sv3+0CXC/T3J1Rt4olMskVFVia7XjiZNovnk02m0i32uRL46P/Fi4f/ffLeIjRuUj/+tW7cZN2Yq3Z7qyOstrBIRCIFzbC/0az9D5txC23MCpkvHkRlFpLmdXXFu2wv9r/OQ2bfA1XoNJrOZmb/uY8krnQjydqPPgnXE1KpMZJBVOrt/TF36x9RVyv/0Nb796xTebi4UGE281a0JtcICyNUb6DljFU29tUS4OinP+MujyJ09TnkXpi7CcPhvzDetfgeU/KvQ9nwV4wnbdwEgum1DgsNDeTNmGFENqjPwg8FM6V5yPuvbqcsL72XfdwbwxMtdWbd4DW5ebgz4YDCz+01ldm8ncPXAZJbM2nmOxc80IMjDhT7/OUhMeACRfoWvP9l6AzN2nmXh0w0I8dSSkWer79W8XVMqhlekd+t+1G5Yizdnvs6Qp0pXyKlRrzoe3h42x57t/wxXz19lQv/J7ErYFgucA74DCkoxcW/+BU52/qkNYPfyfTDWoupXA2Vn8p/lVPabB3xi8bdQC5h/l7hNzSk3kamJYDJiOLADpwYllSSdO3THELcbmWWrL2M6fwKZY6u08bA+EHR5RZU5y97MeC/fDELjominmI1Ig5GUX/YQUMRPAkBA5yYkr1Y0/rMOXUDj5Y5zBR/UHq54t6hN4neKnr00GDFm5SnXdOkGlQJ9qBjgjbPWla6xrdhxoux9MJsOn6dzI6XFnqMr4HD8TZ5toQjQOWnUNO/Ygh0WPf/zd9HNt9XzdylUuqxUrRLH9xxDJ/Kp5KWlcvVaOLl70alWKDvik2zzciaBdtVDCPG64wPBpTAsOVvH7ospPFdP2f3dtVsHfvh+LQAHDx7F29uLoODSZbgBPDzcaRPTgvXrlEohLTWdw4ePYzTYfgBUQVWRt1OQWWlgNmE8fxB1hG1LX1OzKaaLR5QKAUBnfcZOXk+jkr8nFf09cdKo6VQ/gh2nizViil7zsct0jo4AINDLjVphisicu4sT4a4aUgsU3wbqyJqYkxOs78K+P3FqVFKh1fmJ7hgOlnwXABp1bMpuy72MP3Iet3L6ZrhzL1s+04aDm/dZpbx1OZxMzqKStysVvV0V3xbVgthxyXaJ/abzybSPrECIp9Lw8HOz/Uy07tSKLT8pCxpOHz6Dh7eHjS7XHVQqFUPfGcySD2xF9e74jLDw8IJydpbO/t/gn6oUyuX7QCp8AiShyMPeixCwajFIKU/cJW6YzLD6KzBnpCJ8bT/gwscfp4atKPhzfTlO/fA+EABiuzyOxqciaq9gTDklVT7LhUoDZutzq7+ZgUsxPXqXED/0CVbBOH1iOi4hfrhWCcKQnkXNz4bT6I851Ph4CCo35QOakplLSOUIXNq8jDqkOgHmTFJuly4joCswsPfMVTrUjwLgRvptfD20TPnuD16c/QPvf78N32A/0m5arzE9Kb1MPf8Rc0exPO5rwqLC2GDR879y+grNu7TAIIwEBwYgPHwR7t4EeWpJybaVvSj0gfDDXnp9tYt1J606YnO3neKN2FqFCtehocHcuGFtvSfcTCI0JJiyeOrpJ9i5Yy/Z2XeXVBAevtaPPSBzMhEeth9O4VMBXNxwef5NtD0noK7ZrDAsJSuP4CJexoK83UjJyqU0dAVG9p6/QYc6VUuEJWRkcy7PwGMeygdU+AYgM6z3QXkXbJ9b4RuAU+PWFGwrXaraN9jfxs9DRlI6vkGl+4wYPHcEi+NWEBIVxpaVihObkPBQ3L09mLxqGtoX30ZdsxkpufkEWT72AEEeLqQW6+FdzcwjS29g0JpD9P7xAOvO2jpECggOIKXIM5aamEpAKdLczw3ozp6tewvVfe+wZsUvVKlWhbWH/wMWQTkU/y0PhqNSuCv34/vgMFDznrHgE2C7EGKTEGK0EKKkSyorpYjc2/507T2M/NVflHsc8GF9IADs2LQbY+YNTFnJqNzKdvBzv5TUzSld419oVHjWDSfhqy0c6jAOU56eyiO7F9qQWSnod32FKfE8Kv9KZfZodp28THR4SOHQkcls5uyNVF5oXZcfx/dC6+KEQVWywVWW1taCsfMY1LQ/CfE3aG3R81+z+Cc8vDzoN7E/Kt8gZPrNwntVqg+EpEwWPN+URT2asXTvBa5m5LArPhlfN2dqB1sflfLexzv8T4+n+Gn1fer6Ww3b/lapUVWojP7XBeT/Mg+nZt2UiqKMPJTqEwPYdeYa0VWC8HZzsTmepzcw5rs/ebOyDx4WyfTy+FVw7TuM/FXLynwXSn0Myiizz8cuYFjTV7gZf4MWTyne9tQaNeF1Ipg74APyf52PU5Mu4OZdavqimMySMynZzH8qmoVPR7Ps4GWu3sq7a76Kl6N/kD+xT7ZhzfK1JeI2jW1C/Kl4nm34AkA0iurog6/BlbL8f48o/9hEs5TyshDirr4PinAvISppsblCCLEF6IyiKz5YCFFfSlnYvLijPNi+fXv3L6e/x51PgcovEJlpK7Wsrlodt6GTlHQe3mjqNUVnMmE8YpXfFe6eeLy/hO/ekpw+dpbg0ArccdZZHh8I61ZtpO/QXiUvyJiPUCvjvfc9OWU2Kr0FCy6hfhQk2baA9InpuIRZW+UuIf5KHAn6m+lkH1aE3FLX/U3lkc8q1+PjQVKm0ho2JZ4nNV8Q6FW6M6rNhy/QuVH1wt9BPh5U8PEg+vGOaCrWZkyj5/h92z4CQgMBRbPeP9ifW/fQ8/9r3W66D36O7au3ocvRsWDsPPKEjuAaOtC6I7MzSM7OJ9BDa5M2yFOLj2sFXJ01uDpraFTJj3MpWZxNvs3O+GQCGvnTtfcgxvSSHDl8nIoVrWvlw0KDSUwqfU+Ln58PjRrVp3fPIWXm+w4y5xbC01rRCw8fZG5miThmXQ4YC8BYgDnhAqqAipgyUwjydifptrVnkHw7j0DLcFhxNh+7TOdoWz8XBpOZt77dTtfoCNqmWlvUMiMN4WcdHiv1XQivjtvwyUq+Pb3R1G+KoU4jNJE1mZGj5tLxeBs/D37B/mV6RAPFz8Pf6/bw5ODu7Fy9nfTEdLIzstDr9JCfizkhnpBKVUg+aHWLnJyjJ9DdtpKr4OGCj9YfVyc1rk5qGob6YKjVCm2sIhuftvU4FUKt1xYYEkh6su21VasTRVjVML7f8w0AWlcXvv/ra3q37kfXFzvx3YLCSfd4lPnQmtynAnMhj3APoLz806Jyd/V9UIQG3PlygK7Y/IIfUDjQKKW8KaVcLqV8BmXsr05RQ3f8Kfzxxx91K4VHIgKCQa3BqWkshiO2WuvZ414ie2xfssf2xRC3C90382wqBACZm03Ou0Me2AdCTJfHuXhWGZevWLWIFLraGRAPtFpBGvVKhaLSIJw0VOjeirQttpODaVviCOqhaPx7NaqGMTuPgpRMClIzyb+ZjmtkKAC+j9cl1zJBXadmda6lZpKQfhuTbyU2bt5CTN2SDnaydXoOxSfQtm5E4bEAL3eCfTy4GLcL/d8/snTaePZs/YtYi55/9TJ08wGCi3h2a9KhaaGev5uXOxonDa5Sy7UcI9eO7sOQr2PLmZvERNkO98RWC+bIjQyrD4TETCL8PRgVU4utwzoy2D+dpO9n8eHo11jz01Z69VYqwiZNosnKyia5FIc9AN2f7crmzdvR6+8972hOvorwqYDw8geVGk31Jpgu2bpyNV08hiosSmkMaJxQBVXFfEuZH3msYgDX0rNIyMjGYDSx5dglYmpXKln++QUcupxE29pWhVwpJe//9BfhFXx46XGbVwLTpbOog8MQgZZ3oXlbDIeLvQtv9iX7zT5kv9kHw8Fd6FbOI3/FJ+RMHszErm8St3U/j1vuZVSD6uiy80r1zRBUxDdDww6NuWm5l4d+P0CNprVRqS3XHVyVWp5w7XYeCVk6xbfFhWRiw22HfmLDAzmSmGm5ryZOJmfBqd3kr5pJ/qqZ7N6yh07/o2wgrN2wFrlZuSWGiPZt28+zDXrwYvM+vNi8D/k6Pb1bKx75khNSaNS6QWH2eVhBuX/B8NE/uiT1Xr4PLN6CRqLMFWy2HN4J9AWWCyFcgReAcZb4nYFtUkqDECIY8EdRDywNo+67+bi/NUtZhrd7M+abV3GOVZaiFey4+zyC6+CJaGrWR3h44/nRDzzj+yW//rDhoXwgtO8WQ9cendH4hCKlxJRdeuu0PL4ZTDlpaLyDafrXJyT+8Cd5524Q2q8jADe//p2MPw7j374BzfbPx6Qr4NzrVo3/+InLqb1oFMJZQ/7VZM6+rmj2u9ZqzTvv+DHs488wG3/n6SbViArxZ/VfytRNj9bKqpftxy/RomZlXF1s/R+P/58YJn69FYPJRJi/F0kHM0iOSWLRrs8tS1LnFcadtHIKi8YtIDP1FqM+fgNXi2+AK2cu87lFz79iVEVGfTwas8nM+cPbeHXcO5jNZp6pW4moAE9WH7mi5KtBVSL8PWkZHsgLK3YqPhDqVSYqsPRRgC1b/uSJTrEcO/Enebp8hg0eVxj205rljBj2NklJytzR8//zJJ98bLssuEJQADt3/4qnpwdOLmo00e3I//Z9KMinYMePuHQfpSxJPb0XmZGIpq4yHGY8sRt5KwnTlVNo+7wD0ozx1B5lWAzQqFW8/XRzhi7fqvh6aFyNqCBfVu9TnBz1aK6MsG4/eZUW1cJwLTJXdfRqCuuPXKRasC8vfPYr8nY2wyp60crHFcxmdF/Px33s7MLl2eaEqzi3s7wL2+89p3Z0+yGi2zbik12L0ev0fF7EN8O4lZNZOm4ht1MzGfLxKFw93BBCcO3MZZZPUnyW3Iy/wfGdR5i15VO0fmqMp/agzkxmfJsaDPv1CGYJz9QOIdLfg9UnlYqkR52KRPi507KyPy/8sB+VEDxbO5Qof+sKon3b9tOiXTN+2PMNel0+M9+cWxg25+sZzB77UYmeQ1G++vRbJn4yjpV/LANlHnQ8RRqh982/YPWR3fwpFFuSur4s3wfFlqS6YV2SesMSPwxl2WlFlGGlr6WUH1nCPga6AXdmGedKKb8tK0+3B3Sw28Bd+80l9xM8KI+qzEWzr2PsZgvsK3Px3ZTq945UToJGrbGbLYfMxf3zxZhHVOYiYdvD+1P46u3y+1N4edZDn++fwG49hTt7C6SUVygypFPc94GUsv897CSg9CxKC3sTePPhc+vAgQMH/wCP8LBQeflX72h24MCBg/8q/4JKweG9zIEDBw7shTSX/68cCCE6CyHOCSHihRBvlxEnVghxVAhxSgix82Ev4ZHy0Wxvvg3ta7eLU9vRf26I6cF20JdGq1Oz7x2pnBysW1KC4lFBSvsNv55w0t47UjkJNtivZai/yy73+yXJyX626ujt66M5Ue1070jlpJF72Uuc75daFzY+dKHlLXm93B8KtyGf3ctHsxo4D3RE2bR7EOglpTxdJI4PsBfoLKW8JoSoIKVMKdVgOXH0FBw4cODAXti3p9AUiJdSXpJSFgCrUPZnFaU3sEZKeQ3gYSsEcFQKDhw4cGA/zLL8f/cmDLhe5PcNy7GiVAd8hRA7hBCHhBD9HvYSHBPNDhw4cGAv7mOi+Y76QpFDS6WURRX7ShUXKfZbAzQC2qOoTv8thNgnpSyp6V9O/o2VggA+A7p2+2MGf49eSsaJKyUiuVcK5PHFw3H28SDj5BX2jlyM2WAiqEUtYlaMJue6ssPVlF+A1s8Lk05P3OSvqD6wEz41KyKlZP+bS0k/FI97pUBaLh6Bi8XWvpGLMBtMhefyqx9Bx/Xvc3r+b1R+qilOahXCWYPxVg5CrSZ1/T6uzP0PcP8+EFRuvqicFSkEaTYpIntm67nvxzdDg70LSPl+GwkLSmrEhE8biE/7hph1BcS/MZ9cS75CBnUjqE8HEILk735HF59A+NSBqL3cQAic/L043vVtco9dtI+tLhPIKWrrg4H4tm+AWVfAhdcXFNoKfe1Jgvq0R0pJ3plrXHhjIVXfeYmgnm1pplGTnZCOxlmDPiuPnzpPKrTnWSmQDguHo/XxIPXkFba/rjwXzt5uPL9hGh4hfkiTme2jP+fSBmU/ZsSgzlTt2xaE4Ob6A1RoWw9nHw8yT1zm0IhFSMuzUPeDfgS1j8akK+Dw60u4feIKHpEhPP7bu2g8XJFSIk1mTs5ezfllmwvzVGNIV6Lf7UPG8cs4ebhy68QV9luesdBOjag77n+QZok0mTgy5RvSDijfA2cvN3qtn4pnaABSSrZPWM6Zn3aXuLf1Xu5Ig1c641M1iM/rDyH/liJ10mz0czQe9hQqoCA9i5ODP+P2Adt9AdWn98e/fQNMOj1nRi0m21L+AKgETbfORJ+UwbG+c6g+vT+BXZqg8fUkL/kWWfE32TN8MYYiyqrlfS+vbzzIiU9+wf3xRgRNHoxQqxBaF/JPX+TGa+8V2nOOqEjIrNFoH4si9eOvyPjSukfFr393fF7ohJQS/fkrAFqse6AejPuoFCwVwNK7RLkBFN3SXhG4WUqcNCllLpArhNgF1EeZi3gg/rHhIyFEsBBilRDiohDitBBioxCiuhDiZLF47wkhxhT5rRFCpAkhZhaL96QQ4ogQ4pjFXumODBS11WpAtf3jvqTpzP6lRmo4qSdnlm3mt9ZjKMjMJbJXbGFYyv5zbOw4iaMz/0PB7Tx+bfUWB8Z9Setlr5O44xgb2oxlc4cJZF1Q7k/0pJ6cW7aJ9a3foiAzl4gitoRKED2pJ0k7jhPZO5YdfeZwoPVojLfzOD3kM+Laj8WvXTRejarZ+EA4P+Zzqs+xOve54wPhQOs3iGs3ttB3glmXiTEzAWNmArIgD5Wrrche964dWfLxB2UUlYLaIwBjVhJHY94goHtrXKtXtAn3adcQbUQIR1qO4OLYxUTMUho3bjUqEdSnA8e7judo+zfx7dCYyLlDON1nOqd7TsV4O9fmA/5QtjJzyTlmqz7g274BrhEhHG4xkvgxS4icrdhyDvYjZFAXjnUaz9HYNxFqFVUm9sY1IoR9US/x2wvTKcjK5dKmg1zedNDGZvMJPTn+xWZ+aDMGfWYuNXsq9zJmziCkWbIscgB/vrWU2LmDAPCsWZGqfduys8s7/Nnubar2a8+NtXv5o+WbGDJzqdJbkYYIah+NR0Qwf7R4k6NjvqD+7IEAuFcNIvPYJdZVeZkdPaajdtZwY5NVssQ11I+gmLoY8/TEf/0HG1u9RcHtXMItz1jK7pNsaT+BrR0ncmD0Upp8ZH1mui0ZhTHfwIKo/qzpPZP6/UvfaJcYd541vWeSdd0q9SFUglrPt+ab9uPYEfkyJp2e2guG26Tzbx+Na3gwfzd/nbNjllFjzis24ZVe7UruoePsmgAAIABJREFUhQSbuAUptzk09XsKbuVwfVMctYd2s0lTnvdyY8dJnPjkF4RKEPzeMK4PmsKtHzah0rrw/9g77/Aoqvb9f2Y3vVfSCBBIACmShN67CUhVQRGVDiIgRRAFfUWqgooKiIAoKoqgWEBpIiBNSuihB0hCeu+7my3n98csyW52IwHyvvL1l/u65kp25jnPnJlzZs6cc55z3won8yACfV4h6Qs+JeezrWb7bfy88XxhALcGT+XW4y8hKZQAz1i9QfeC6iXEOwmESZIUYqT+eQbYVsHmF6Cz8b3pBLSlnDLovvBfaRSM9BU/AQeEEA2EEE2AOcjcInfDY8hCF0ONfpAkyRa5Re1v1GGIAA5Ukn4g8BUgsk7fwM7dGcdalmSqfp2akPir/KV38/tDBEe3tLAJjmrJrR8OA5B/LRk7NydS9p4FwKDVozXqEPh1aspto69b3x+ktom2QcPRUdzecRIhBOrMfIoTM2UNhB8P4RPdCslWiWSjRAhxXxoIZpVLsizOe9VmyPrlMF5Rrc1svKJbk2nMV9FpOV+2tTxwDKtN4alrGFSloDegTkzDoNaiSUyn5HIimVv2Y+vlWi2+MrYcsPQV1ZqMLQdMfDlhayxrSalE4WAHSgUKR3scGwSW2WacuYG9mzOhA9oR98tfZj4DOzYp6wFc++EQIVFyvajVoj7XfzoCwI3tx1E62OHVuDauYUHknIpDrypF6A3YODugMNJ/JG45RICxLvhHtSRxi/yVnns6Dls3J+xreZjtt3F2xKAzYCgtp0qIePt5zi/YhNLelpQ9pwGI33KQoD6yX11J+Up7G6dyLQo7F0f8WjTg5Er5HZJ68hp2zg44WXkWMi8mUJhkzuzgF96AvFtpFCRmIrR6cg/FYlPhhesb3Zq072V1NtP6CjJ1u0/vCFKMdfaOrVNoANe/+gM7d2dyLyYS/Lh5XavKc3kH3hENKE1IQWi1uHRpScHuw9j4mH8U6XPyUV+4jtDpLdJLNkokYx2RHO3B8iv83qHTV327C4QQOmAysBv5Rb9FCHFRkqQXJUl60WhzGZki6DwyldBnQojYynxWBf+tnkJ3QCuEKBuvEEKcxXzSpDIMQx7+SQTaGfe5Ig91ZRt9aYQQla1vN5ucKU7JwdHfvKLYe7mgzS9B6OWuXklqDk4mNr4tQ3n890UE92mFZKQfdqlbC726lNZLxxC9ZxFt3huL0tEeOy8XSvOLy3ypUsvP5+jvSe0+rYj7ai82jvZocsoFVTRpudR+sT8dL64n98/zFJ6Ouy8NBACFkyc2nnVQ2LtgKLnHEL0K2gylqTnYVdBmsPP3QpNS/tLQpGZjF+BNydVE3No1wcbTBYWjHe7tm5o9fKWpOUh2ttXkKxvJzny00y7AG02K6f3KKWODTV69jVanVtPm/Dr0BSVl7LB3oC1RoyksIT++nH/KwdOF0oLyelGUmoOzsSwNWh2eofIcX63w+iiUSryb1KHgym182jXG1tMFx0AvJIWEk1GpTp2ajWOAsS4EeKJKKS8bdWoOjgGeZvvrDGxHSUpWWZrAxyJRpeVQkpZjHB6yXl+D+rSiz6FldP56Fiemy6MRbnV8EQYDjZ/oyLAdC+n57liKM/Jw8a8aXbuLvyeFKTk0iGpFu8Mf4D+kC7nHzD9A7QM8UVuprwANF4wgbv43COOE6h3boiu3qR0VSXFKDiFPdsQ5sFyToarPZfeNs3BvGISTvye61Cz85k4gY+nn6LPzkOyrotUFuvRsstf/SNifXxJ29BsMhcUAD87LUs3rFIQQO4QQDY0f14uM+z6t8G5dJoRoIoRoJoT48EEv4b/VKDQDTlVyrIFxocVZSZLOAmWcxEYCvJ7Ar8Am5AYCIUQOcrcpQZKkTZIkDZckK5/FwPXr1+tERUV9JklSzL4So1arRVfNutYAQM6FeH5qM43fes+lKCmT8NeGAqBQKrBxduT2b8fZ9dhcdCUamkzub53v3ugr8u3nObvou7IHwwwGQcbPR/grfAKukaE4Nw6uNF9/p4EAYCjJRZebiEFThMLx7hz1d0WF+2VVU0EIVNeTSV71M002v8Uj376JOikTcZfKXp2+rN56IVC6O+MV3ZqYNpM42WI8Cid77ALMBWEcfdy5faCCRpNVnQX5b0FCBrYuDjy1axHNRj6GtliNQWeg6HoK11dup+Pm12m15mUMpToMJo1Z2Tqgynwb90u2SoKiWqLJLAAhUDra0WTqQGKX/lCJ/kP5/8k7Y9jZeRZHRi+n2atDAFDYKLF3deLG7lNs6vsGWpUG19o+VefxN57zxu4YjnWawe21O3CPDK1oZJlOCLx7R1KaVUDh+VsWtpenfUrDkb3xCa+P0tHOrFdU1efy6ud76Pr5dJAkbAJ80Wfnob4YV7XrMkLh5oJrz3bE9RjF9Y7PoXB0AJmI88FQvdFH/wj+iYnmG0KI8Ds/JEmaZ3KsH7BfCFEiSdJW4E1JkqYLIfRCiLGSJDUHegEzkRd0jDSmmwSMAwgLCzu+e/fufcCmjYHPCedAL1Tp5pz2mpxCbN2dkJQKhN6AU4AXqnSZBjjkqY6EDpfHgbPP3sQl2hd7LxdKUnMQej1pf8o9s9u/nuCRyf3R5BRi5+5c5svRxJdXixA6rJb1Yh183JCUCoKiW2L47a8yDQRdQQl5Ry7i1T38vjQQTGHQFGHj5o+hpHKee8tE5toMdgFelKZb0WYI9OFOP6csX0DGpj/I2PQHAKEfTcY+wNvMlyjVVpMvb0SpOQNlaUo29oHeJr7ke+rR5VE0iRn4DOiA3/Ce2Hi4YChRl9lKSgVOvu5c33rEzJ86pxA7t/J60XxMFK61fXhq1yIyz90k+eilsuGm8Tc3kHkhHicgYdMBEjYdAKDfrS8oTpB7Hw4B3qjT5LqnSsnB0fhVHDKqN15tGtHy4xfJibmOY6AXdp7h5F6IxynIG1VaHi51/XCu40vUH/LUmmSj4LE9i9jb5z9m9dUUmceu4NmsLlH730EvSWhL1GiL5XnTuB0naPp0V4rSLaU2raEoNQdXk694fYkGpbMDtl6uaI09Xk1qDg5B3uSX3X9vNGm51OrfDp+oltQa2B4bVyckpYQqPl22PXGVfcPeZcChZdz84TBeJspxf/dcmk5Gp+w7h2LJSLTFKuzqBWIfVocGXVuj9HBFsrcl8L2ZpMysXN8cwLlDONqkNPQ5BQAU7jmCa+/2HYBKCTarAlFDc1EpLiKHSd0rhgG9JEmKR+5peCMPRQEghLhglO/sDTxpkm4VsmpSOPAz8AIg+UQ2oLSgBFWG5YOQfuQSdfq1AaD+kM4k7ZbHaxN/O1k2mZV/LRkbZwc0OUU4B/ui12ixdZX1XP06N6XAOImWfuQSwUZfIUO6kLRb7iRtbzed7W2nsb3tNBK3H0ebX0LexUTs/D3xe6IzWbtjUDjY4dnlUUriku9LA8H0ha6wc0Lc42rpitoMPgM7kVNBmyF390l8jflyiZTzpTXeU1tvmUHTLsgHl8iGKBztsQ+uVeZLazJk9iC+fAd1tPCVsyeGWkO7WfjSJGXh2rIhGd/t41yvWRQcvUj+sctlts1G9kanLiXrYrzF/Ug5eon6j8tlaevkwPElm/khei63D8XS8CmZArvN7CFoClUU3JJ1EOx85Hw7BnkjdAb0KrkhrDO0M2nGe5m25xR1hsrp887douBSIvu6zSZ1Vwx1hnam9uAOZJ+OQ1uoQp2RR/6V2/zS/CV+bTONX9tMQ68q5eLyn1Bn5lNvaBdSdsl1zKVe+TSdZ/N66DVadnd/jY29X6MgOZvmz/cE4JEnO6EtVlNi5VmwhvRzN/EKC8It2BfJVkngM93keTSTMsjcHYP/kC6AeX29sWgTRyJe4tAjYzkzdCHZf5zh2ptf4j+kC7Y+btx5Lhs+14PrX/9hft5KnksH3/IesHd4fSSFRNrBi4AgYdgsbjw2Dn12HqrTV+7aIABoUzNxDG+M5CAPwzq1D4cHnKAF/hU9hf8KzYVxgvgY8qTHOuO+1shU2avu0Gob988DipAnkuOA4DtKapIkjQI6IeumthJCHDDu7wV8aOrH9PTIknrRuZdv1/9r+lpyjN3Y7l/P5NjMz1Cl5+FSx5dOJmGkR6asxlCqo+Go3jR8oSdCp0en1lKSlotX0zryQ7lyG43H90Fpa4O9rzt/PLmAwrhUnOv40nH1FOw8nMmNTeCvKZ9U6BZD2+UTUKXlEtyvDXYOtkhKBdqcQmy9XCk8d5PYF2S6irAlY/DqEV6mgVBojLhxaVqPRh+8aKaBoMsvpkviBvmljkAYdOiLssxCUk21Gby9PKxqM0i2jihdvNHcziH9u30kf7QVvxfkSJX0r+Rh1pDFY/HsLocexk1fVRZi2uznBdh4uiK0euLnbUCysyVk/iiUro5yNIi9LYZSLZrUbM51nVY9vlKyOdt1OgD1l4zFo3s4BpWGuGmflEU7Bc8ais+Ajgi9nuILt4h7ZTUhb4/Eo3s4Ck9XLn69lxPvfg9A3y9ncuDVzyhJz8O1ji+9V8n1Iis2nj+myvXCLzKUvl/PwsbRHr26lJ1jl5N69DL+WgN9L69Fk1OAQa3l2qpfCR0Xja2HM/mxCZyatKqsLjy6ZCR+3VugU2k4M20Neefketli2RjqPdudgrgUjk/9lFzj/s4bZ3HylXWo0/Pof+pj1NkF2Lo4khebwLHJch1rPKkf9YZ0xqDVo1eXcm7Bt2SduEaarYRPkzoM3jgbezcndBotv45dTtJf8ntv4IaZ7J39GcXpebQY9RgtX+yHs687JdkFxO87xx+zP6PXe+NoPKgDElCamU/six/j0liOkEz+ai8AjZaMxqtHCwyqUi5NXV1WX+/Ao0MT6r7Uj3PPLaXRktHUGtQepbMjqsx84n/+i7OLN9/Xc3nq7W/IirlOl7718Zsrh6QWHzuHja8XRfvlieq8TTtQ+ngS8tNHKFycwGDAUKLmZp8JGIpU+Lw8HLe+XRB6PZpLN3Ef1MMBeCCO/OKFVafWcX5j40NJnf1f4z6SJCkQ+BC5x6AG4oFpwE+VNApZyPwdz5gc80KORApFnmNoAKiAYmCqEML8k7YCariP7g013Ef3jhruo3vHv5n7qHjesKo3CvM2PZSNwn9TozkFWTWtIirKZ84z+bmhwrEc4I4Aa99qzF4NalCDGlQ/HuJhoari37iiuQY1qEEN/hnch+b6w4aaRqEGNahBDaoLNT2FhxsDHn9gFtky9Pqt+jSa//xqSLX5qs55gNYXlt3d6B4wuVX16Ud/+HHbavPV9anl1earYLllaPD9QnKtfOX5vSJl6elq8/VaYfXNwQB8Od1yVfX94qkPqm9OYUc1+Pg3hKT+qxuFGtSgBjX4n0JX0yjUoAY1qEEN7qBmTuHhhrJpKxyemYikUFB6aBeluzZbtVPUa4jz6x+hWrMY3elDSJ6+OI6eheTuBcKA9uAO+E1O+8qCl+nQoy1qlYb505dw9cJ1C3//Wf4ake3DKSqUKYjfnvYO1y/GETW4Fy9Mehb7YHcOHjrM4neXYtDpGNy+CaN7tzLzseGP0+yIkemd9AYDt9Jy2b94LO7ODhSUaPjhUh4Dnh9L3WMDSP92L+qPf7PIR1UpqlPXyWklO2eUTp6gtEWfn4zQmYfOVoWG++/w9FujaNY9klKVhg0zV3H74i0Lm+ffnUjdR+sjIZF+K5UvZ65CU6LmyJXbLN32FwaDYHCbRozuEW6WbsOBc+wwrvjWGwS3MvLYP+85HGxtGL36V7Q6PTqDgV7N6wOw/IP59InuQYlKxZgx0zlz1pJD7MC+H3FxdQGglq83J2PO8uRTY3hlxosMG/YEAA61PTkce52Fs6djMBgY1DSI0a1CLHzFJOWw7OBVdAaBh4Mt65+SieDm7b3IwVuZeDnasXViFEdupLF0z3kMQjA4vB6jOzSy8HUyIZNle86jMxjwdLJn/fNdiM8u5NUfT5TZ3NYW8GaXaPrPeQVJqaRg607y1m8x8+PyeHc8xsgBgqJETeaCFZReldcZ+C6YgXOXtuhz8qDXVABGzRtHZPeWaFQaVs38iFux5msSACYunUz95qFIkkTqrRRWvfIR6hI1Tq5OTPlwOj6BvjjUdgOlDWg16GIPo4vZbeZDUbsh9v1fQhTIHFm6uDPojst11Ca8BzbNOoEkoYs9DGxgwtsTaN29NRqVhg9e+YAbsTcqZqsML779Ir2H9ubJR+S1r+16t+P5mc9jkId9YpDD5g9X6uBuqJlTuHdIkiSAD4QQrxh/zwRc7oSmGoUnZhjNC4AZQojDkiTNAJoKIcYY7YYDzwohHq94DiOUjs9Opnj5a4jcLJznrkB37i8MqYkVMqTA4cmx6C6aUDUZ9Ki/X4shMQ7sHXF+cxUhYccICPYnOKQ2T3YcTrPIJsxeMoPR/SZaPfnHC1az7zdzDe2U26m8+OTL/PJBFAuWbOLzT1fhGX+I4e9tpmuz+jQw4ecZ2TOSkT0jAfjzwi02HjiLu7M8trvsp8O89eFabGN3cvK57YTvXErcrnOo7qxyxpyi2iUyjPrvjOfC46+bUVQbSnU0+fZNcveeRn0rFaEvRVeYjtLFx+o1Derbm2efHMCcBXdfMVoRzbpFUCskgDe7TSEkIozhi8bxzqA5FnbfL9iA2khpMOSNEXQbEc2u1T+x5KcjfDq+L37uzgz/+Ge6Nq1LA79ysrSR3VowslsL+X5dSmDjwQu4OzkghGDdhMdxsrdFqzcwatU2BvTvSVhoCI2bdKJtm0hWrVxCh079LfLSrccTZf9v2byWbdvlhXzvf/Ap738gN4oFW+cy//3NfDIgHD8XB4ZvPk7XEF8aeLuUpS3UaFm8/wqrBkUQ4OpITkl5Y9v/kUCefjSYN/fEojcIluw6x6fPdsLPzZHhn++na1gADXzdyuwL1KUs2XWWVc90JMDdiRwjjUU9b1e2jJNXL+sNgsfe3c7jb75K6vjX0aVlUXvzCor3H0N7s7z+a5PTSRk5C0NBEU6dWuH71lSSn5UbgMKf95D/7Tb8FstzVhHdWxIQEsCUri8SFtGQcQsnMmeQ5XzWhvnrURnLb8Sbo4ke8Tg/r95K1At9Sbp+m2XjlrDp7DokG1tUX7yBw9Ovor95HpGTaubHkHwdzbZVZvsk70BsmnVC/d0S0OuxH/wyUc9EEVQviLFdxtIoohGTF01m+sDpFvkCCHs0DBd3F7N9Z4+c5djvxwDYkbhjNLAFaGzVQRVglefs/xj+CTlODfCEJEkWbx5JkvoBE4BOQojGyGR530qS5A98DLSUJKmjUax6ITDlb87TxpCZgshKA70O7ck/sQnvYGFk12Mg2lOHEIXly/9Ffo7cIABoVBhSE/EN8KVLVCd2/CB/1cSevoSruwvetbwsfFaGCzEXKcwvIjYhnWBvN+o0aIitjZKoyIYcuGD51XUHO09fI7plGABFqlJU9p44GUoQqgKUWgM5vxy5b7rrgmMX8eoj0wqg18pbJbgbDfffocVjrTn2o5yfW2eu4+jqjJuv5YSj2oTjxtbBDoSgQCoh2MeN2t5u8v0Kb8CBiwmVnmvnmRtER8jkbZIk4WSkstbpDegMBh5//DG+/uYHAI6fOI27hzv+/rUq9efi4kz3bh355ZddFscuCU+CPZ2p7e6ErVJBVJg/B25mmtnsvJpGz9BaBBgpUrycypk8WwZ54u4g5y82JYdgL2dqezrLvprU5sA185flztjb9GgUSIC7LKzk5Ww5CXw8PoPOLSIw3E5Bl5QGOh1FOw/g3KO9mZ3m7CUMBXJvVn3+CjZ+5Y+k+lQshvxySovWvdvw59b9AFw/cw1nN2c8alkyrqpMys/O3q6MEFAIgaOLI6HhYYjCHISqCHRadNdiUDZoYeHHGhRe/hjSboFOC8KAPukaUcOi+GOrTJVx9cxVnN2c8bSSL4VCweg5o1m/eL3ZfnWJmaaOM5bKZveGfwHNxT/RKOiQKS2sNeezgVlCiCwAIcRp4EtgkpFb/CVknqOlwOdCiMrfpBBkyCl/OEVuJgoPc0poycMbm4iOaP+0HHops/H2QxkcysXTl6jl70N6SnlEU0ZKJrX8fa2mm/jaWL7Z+znT503CtgJ9dEZeMQG1g9FnyS82Pw8XMvKLrPpRlWo5ejmBXi3kl1xSdj71goOIib3G0+9u4nOHZIpTs+6b7tqzRyT2gdZ7BtUJDz8vckyoq/PSsvH0t96gjlj2EstOrsO/QSD7NuxEI2nx9yj/wvNzdyYjv9hqWlWpjqNXk+jVvF7ZPr3BwNAPttLj7a9pFxaEv58/SbfLqfOTk1IJCvSvNO+DBvVh3/4jFBaal5GjowOZkhO1lOUNqZ+LPZnF5pFqCXklFKi1jN0aw7ObjrH9snXa/oxCNf7GhgPAz82RjEKVmU1CThEFai1jvj7IsPX72H7esnHcfTGJzn510KWV139dehY2tSovZ9cnoik5fLLS417+3mSb1KfstCy8/Lyt2r607GXWxXxJYGhtdm74FYBdX+4gKDSY1ze8iSKgPqUHNgMCUZiL5Gz5caAIqI/D8DewHzQFySsAAENWCoqgMHBwBhtblCHN8fDxIDO1/Dqz0rLw8be8zv4j+3P89+PkZlgSCbaPas+afWsAfgNGV3oTqgKDoerbQ4p/olEA+cU+XJKkijzPTbGk3I4x7kcIcRSZtKoXcsPwd6ic09oIh6cnovnxs8onh+wdcJr4H9SbV1NcVFIJ/bFli79qyVqGdH6ekX0n4ObhxguTnjXPmIsnkpMH2mvlAi9WKaWBg7G3CA8JKBs60hsMpOQUEOLnyebZw7AXCs7aFN433XXxpXiE/u6CHw+Ku9E/m+LLWZ/watsJpMYl07q/Ze9O9mc97cFLCYTX88PdRBBGqVCwZcaT7H7jWWJvZ6JUVq0c7+CZoQP5bvPPFvv79XsMQ47cE/076A2CyxmFrBgQwapBkaw7cZOEXMtGTVj5SK14nXqD4HJqLiuf7sAnwzqy9vAVErLLv+i1egN/Xk/lEYWVMNJKrtGhdQvcnogi+4P1Vo/L+bBen6zhk1kfM6HNKJLjbtOhv0wCGN41gviLt1jz2ifob5zFrvswsLMe6mrISET1+RzU3yxEe3Y/9v3lIVqRm4Y2ZjcOT0zDftBUDJm3rX7XVyxLLz8vOj3eiW0bKoqWyfhr919M6DEBYBCwwKpRVaEzVH17SPGPNApCiAJkdbSXq2AuYSx6SZJcgFaALeX0F+bGkjRekqSYXr16zU+1Lx/qkDx9MeSZxzQr6zXEcdwcXJZ8hW1kZxyGTykfYlIqcZr4HwzZ6dj3f46Nv39GVno2foHlwwy1An3JTDdXrALIzpDPoy3Vsn3zTpqGlw9Rhj5Sn8CWPUiJuwhaueuanleEr5uz1Yvfdfo60S0blv3283BBU1yAt6+cj9Y6N0SgZ6V013dQkaL6/GOzuDj4TXR5Rahvmg9RVBe6PR/FGzuW8caOZeSl5+AVWP5l6eHvTV565THmwmAg5tejRES3w17YkpZX/pWenl9c+f06e4PoiAYW+5X1wvGNHsfytRvIyMygdnBg2bGg2gGkpKZbpAHw8vKkdesIduz4w+LY00MH4KvOJL2ovGeQXqTB19nezK6Wiz0d6nrjaKvE09GOyCBPrmVZ9gz9XB1JM+kZpBeo8HVxNLdxc6RDAz8c7WzwdLKnZR0frmbklx0/HJdGY38P7DNysDHpxdr4+aDLzKYi7BqGUGv+NNKmzDMbLgJw6d8TmzqBLNuxnJz0HLxN6pO3vw85GZWXn8Fg4Oj2w7TrIw9ZdR/Sk+O7/iInLRvJ3hFRkIXC0x/J1RNRXIG5tVQNWvmeGuJjQamUeweA/uIRdLFHkOwdsGkQQXZ6Nr4B5dfp4+9Ddrr5dTZo2oCAugGsP7ieL458gb2jPZ8d/Mxatg8i86vdd9dZCFHlrSqQJClakqSrkiTFSZL02t/YtZYkSS9J0lP3m/c7+Kd6CiCT5Y1BHse7g0tYUm5HGvcDvI3Md74IsLoCSQixVgjRau/evc2DQxog+fiD0gbb1l3RnTOXXix6/YWyTXv6EOpvVqA7exQAhxEz0Kcmolo9n+L5E3mu91j+3HWIvk/JDKPNIptQVFBc1gCYwnSeoWt0J25claNs/IJq8e5nC2gsUkhMyyI5Ox+tTs/u09fo2twyYqVQpeFUXDLdjREzAD5uzuSlJKK3d0VydOWqo5pu/aLum+7aq287Mn++/2CLv8OBr3ezsO8sFvadxdk9J2n3hJyfkIgwVIUlFGRa0jj71i0fxnm0Z0vSbiTjKpxIzCogOadAvl9nb9C1SR2LtIWqUk7dTKN707pl+3KKVBSoNOjjz5K/93NeHvsC27ft5vnh8rPTtk0kBfkFpKVZX+j41JP9+G3HXjQa8yEhNzdXunRuR2NDFol5JSTnq9DqDey+nka3+ubfK93q+3ImJQ+dwYBKqyc2LZ8QL8tGrWmgJ4k5RSTnFcu+LiXRtWGAua+GAZy5nW30peNCSi71vcs/fnZdSiK6aW00sVexrROETZAf2Njg0qcbxfuPmfmy8ffF/8P/kP76MrQJyRb5Kdr+B7rEFGb1nc7JPcfo+qTMYh8W0ZCSwmLyrAzF+JuUX8terUm+IQc/ZCVn0rzjo8Sdu47k6Y/kFYChMAebhq3Q3zhn7sSpfGJd4VcPUIDa2LNydEV3/gCabasQmhK2fbGNnk/KE+yNIhpRXFhsMUR0ct9Jnmv1HKM6jmJUx1FoVBrGdpE1tgPqmt3fSMAOo8LjfaEa5xQkSVIij6r0AZoAwyRJalKJ3bvIsp0PjH8sJFUIkSNJ0hbkhuFz4+6lwLuSJEULIbIlSQpHFtJpaxTYeRxZM6EUGC1JUm8hxO+VnEKn/nYlTtMWI0kKSo/sxpCSgG1XOVjp7+YRlKFNsWvfG33STWz+sxqADqo1HPnjGB0XbUD6AAAgAElEQVR6tuPHo9+iVmlYMP2dsjTLv36XRTOXkpWezYKVb+Lh7YEkwbWLcbwz+wMAxk4fgbunO47ePXjzTUdeev8j9CUFDGzXhNAAb74/LCuBDenUHIB952/SvnEdHO3N5yRmPdGJd5csZvTEKUzb25PCTQdQXbttRned+8dpPHpGEvnXqjKK6jtotH5WGUX1rdfXoTeOz0t2TiidfUChROnmj9CVoi9IKz+vCQ13z0HPWaXhrgyx+0/TvHsEC/9cQamqlC9nledn8hev8/XsTynIzGPk+5NwdHECCZIuJ/DtG+tQIPHaoA5MXLcTg0EwsE0jQv29+P4v+VthSHv5OdkXG0/7hkE4mszhZBWU8ObmPzEYBAYheKxFfWau+Z3uPbpx9fIRSlQqxo6dUWa//ZevGP/iLFKNPYenhw5g6TLzKBiAQQP78Pveg/Q36JjdrREv/XJazlvTQBp4u/D9BVkRdkjzYOp7udChrjdDvzmGQoLBTYMINUYnvbbrPKeScslTa+m7che9GgcxcdMR2VeLuoT6uvH9KXnqbEjL+tT3caNDfT+GrvsDSZIYHF6P0FryKKxKq+PYrQze6BNB4e4cshavImDNYiSlgoKf9qC9kYDbULn+F2z5Dc+Jw1G4u+L7hiwEJfR6kp+WYzdqLX0Nx9aPovRw59Nj69myfBPpiemsOPgppSoNq2auKLsXr294k09fXUVeZi6TPpiGk4sjSBIJl+NZN1d+fn74eAuT3n+ZZTuWlw07OQx9Fd3FI4icVGyay7oMugsHsQmLxObRrmDQI3RaSneuKzuXfb8JSA7OYNBTun8Th349RPO2zVl/aD0alYblM8u/Fd/e8DYfzf6InL/pkXbs25GeT/ZEp9WB/AJ+mgeZbK7eCeQ2QNyduVNJkr5D1qC/VMFuCrAVaE014L9GnV3pCSWpSAjhYvzfD7gFLDUJSZ2IHCssgELgFeCQcVskhNhptGuFPAQVLoSwykVdMO6xaru4aqW5+KL6aC7OjNxfbb7+f6G5cK2hubgnVD/NReWT+veKpz6oiux71bAj8cGps/NH9aryO8f9i71/ez7jUFC0EGKs8ffzQFshxGQTmyDgW6AHsB74VQjxw/3k/Q7+5z2FOw2C8f90ZOEd0+OrgdVWknaqYBeD3KWqQQ1qUIOHA/fQUzCuyRpvsmutEGKtqYmVZBVP8CEwWwihryxY5V7xr17RXIMa1KAG/0sIXdUbBWMDsPZvTJKAYJPftYGK8cytgO+MDYIP0FeSJJ0QwjJcroqoaRRqUIMa1KC6UL1zCieBMEmSQoBk4BnALL5dCFEWoSJJ0gbk4aP7bhDgX94ovPt79S3K+q2pZXTG/WL4+D3V5msm1SdtWJ1zAAArY6pPKnRuq7nV5utqQ2vS3veHxcuqj7o5h+qjei8U1kN27wevG6p3HUuzhSfublRFXFw1qNp8VQuqcfmBEEInSdJk5KgiJfKC3YuSJL1oPH7vBGRVwL+6UahBDWpQg/8lqpv7SAixgwpSD5U1BkKIkdVxzppGoQY1qEENqgsP70LlKqOmUahBDWpQg2rCvUw0P6z4/6JRePytF2jUPRytqpStMz8l5WK8hc2QDycR1DwEg05P0rkb/DxnPQadnhYDO9Llxf542mtBqUSydwC9DtXO31Bt/tbMh137jjiPHAPCgNDrKfpkJbqL8oI0l1dmY9+2PYa8XOg2DYAx88YR2b0VGpWGlTM/5KYVfvqXlk4htHkoSBKpt5JZYeSnb9enA1Pen4q9rQ3arHwuP7uQkqvmMdv3qqcQ2bcd/acNxT80iHcGvk7ChZsPpIFwN9yrPsOAt0bQ2FiOW2auJtlKOQ77cBK1m9dHr9Nz+9wNts75DIOufEy89qP1qf/TRvTZeQi15oF0Bm4PnlCW5vG3XqChSR1LraSOBZrUsV+MdcynQSBPLJtAQNN6bH/vOzwDfWjaPQKtSsNXMz+xes9HfjiFus0boNfpiD93g2/nrMWg0+Po5szzyybiVacWWo2W9FupNIgIQ6PSsHbmShKs1LGxS18ipHkoSJB2K5W1r6xAU6KmcbumTF/3GtxOR+HiiI2rM7qCYrI3/U76J1vNfNg3CKLu+y/j1KwBKcs2krFGnuuU7G1p+MNiJDtbJKWSvB1HYdG7/Gfxq3Tr1RG1Ss2sKW9x8fwVq2X+ypxJ9B3YG71ezzdf/MCX6zZRP7QeS1e8TdNHG6O4fADdVZmp4Mj1FJbuOCVrUUQ2YHSXpma+Nhy+xI7zcrnoDYJbmQXsn/0E7k72FU973/gXaOz8ozQXZjDydpyVJClWkqTtRnpsJEmqJ0mSkCRpgYmtjyRJWkmSVt7Nb8Nu4fiE+PNBtxn8POczBiyyToJ47ucjfNhzJh9HzcbGwY5Wz8hL+nNvZ7Du6QXkThyL5OKKoaiQnLEjcOjeE2WdumY+Ss+cJnfCaHJfHEvhe+/iOqOcb16zZyf5c8p/R3ZvSUBIIJO6TuDT11cxfqF1XYYv5n/GjD5TmRH9MpkpmfQZ8TgKhYJJ705m73d7OB76HIYSDfXfN09vqqdwY9Zq6r8jh0Ob6imc7TkDz16tcAiRl/qnXL3Npy++x/UTlwFzDYSNc9YwfNE4q3n8fsEGFvaZxYI+M8lNyaLbiOhKy8MUg/r25tMPFlbJtrGxHJd2m87WOesYvGiMVbszPx9hWc9X+CDqVWwd7GhjLEcASSHR97VnEaVactd+S+KAcbj07Y5tfXPKjDs6A0lPTCT302/wfWtq2bHCn/eQ8qL5pHfDbuF4h/izvAp17KOeM1kRNRtbkzqmyivit3lf8se67fg1CKRWiD/zur3MN3PW8syisVZ9nfz5MG/3nMbCqJnYOtjR8ZkeAERPGkzSpXjmRs/gz817ad4tnJldJ/H5658yauF4q742zv+CuX1mMDd6BtkpmfQe0afs2NWTl7nS9xUk4Er/mVzuMRnPgZ1xCAs286HPKyLprXVkrDUPfBEaLdeffpMrUdO4HD0Nt26RjH5xOPXq16FHm4HMmbGQBcssdTUAnho2gIAgf3q1G8xjHZ7k159k6vL8vHzmz3mXz1Z9VX5+g4Elv8aw6vnu/Dj5cXZdSOCGCScUwMhOTdjyUl+2vNSXl3u1oGW9WtXaIADy8FFVt4cUD02jAKiEEOFCiGZADjDJ5NhNoJ/J7yHAxao4feSxlpz58RAAt8/E4eDqhKsVHv9rB86W/Z907gbuRlrnxNPXURcUY9PoEfSJ8Sg8PECnQ31gH3YdOpk7UZeTmUkO5kRm2gvnMRSWE4616d2WA0Z++mt/wwNvzk9vD0IQGh6GTqfnrx1HEVodGVv241g/EFufctLZ+9FTSLuRTPrN8jDoB9FAqAruRZ+hyWMtOW0sx8QzcThWUo5XTMrx9rm4snIE6DgymuTYmxgKitBn51WLzgDIdeysMW9JxjrmUoU65mbMW3F2Acnnb6LX6QlsGMzxHw8CEH/mOk6V3POLB86U/Z9wLg5PI3V6QFhtrh6Re6f1mjXAoDPg5uPOjTPXcHJzxt1KHVNbaCCYH3cOD0MTn0ZpYjpCqyN32yHcH2tjZqPLzqfkXBxCa8kYazD2GiUbJZKNktbtI/lpi0ypffbUBdzcXfH1s4wUHD5qCCveW1tGHpedlVv29/yZS+h05eeKTcom2MuF2l4usuZG87ocuJJk4fMOdl5IILp53UqP3y+Eoerbw4qHqVEwxV9AkMlvFXDZSG0BMj/JFotUVuDm50l+SnnYYEFaDm7+lg/GHShslEQM7sS1P81JuhQ+PkgOjpSePA6AISsTpY9lRbbr2BnP9V/hvvAdCt+rPCTTy9+brJRyHvjstOxK+eknL3uZz2O+Iig0iN82/Iq3vzc5adllDJSSrQ027s7YmbCQVoeewoNoIFQ33P28yDPLS47ZC78iFDZKIgd35qqxHN38PGkW1Zrb525gUJUPbT2ozgCA633UsfDBnbheoY4BOLg6kWtSbrlp2Xjc5TrbDO7MxT/lBifpcgLh0TIlSFDDYFw8XfEyNhg5adl4+Vn3NW7ZZFbGfE5AaBC/byjnBQuNbES9la/gEBaMQ0O5d6BNzcbW33pdtZ5JBY13LefRs19RcOgstrY2pCaXc2qlpaTjH2ApclSnXm0eH/QYv+z9hs+/W0m9Cj06U2QUqvB3Lw/D9XNzIqOgxKqtqlTH0bhUejUJtnr8gVDTU6h+GBn/egIVyc+/A56RJKk2oMdyZV9l/iz2/d2H7IAFo7h14goJJ6+a7bepF4IyOJjidWtMHFmmLz1yiNwxL1Awby7OIyvX67BOT289YytnfczYNiNJjkuiU//OgET85Xhc3Fxo8ft7eHRtgTa7AGEydl4degrVrYHwQKiilsUdDF4wmpsnrhBvLMcB/3mBHe98az3/D6AzIGftrtIdZhiwYBTxVuqY7Mta9v5G62HBWOJOXObGSXlMfs/qn3Fyd2bhjvfxDa5FWnwqBn35G6gyX+tmrWRKm7GkxCXTtr/cA46Pvcn0DhNIXrQB1bVE6n9mMsxzL5xpBgNXoqcT22YMzuENcXGxXENhLV92dnZoNKUM7DWczV//yLsfvVXpKaxlp1KNkqvJhAf7VP/QETU9heqGoyRJZ5Fpa72Aiuynu4DewDBgc2VOJEka//rrrydcuXKlZPT2eRSk5+IeWP515ObvRWG6JeUvQI+pT+Ds7cbOBRvN9vs1DsahTz/0t24hCgsAUPj4os+21FK4A+2F8ygDgpDcyod07Hs9hjIwiPd3fEhOeg4+geUUy97+3uTehZ/+8PZDtOvTgey0LDx8PVg562PO9Z5J7t5TSLY2aBLLFz/dr55Ct+ejqNu8PmM+mvpAGgjVAYWDGzYeQdh4BFGQnouHWV68KKikHHtNfRJnb1d+XfB12b7aj9bn2RUvM3DeCGyDA/B9YwpOPdrfl84AgMLdldo/fMKkHYsptFLHKstb96lP4FShjrV9vjeTdiym0/DeqApVeJqUm6e/N/mV+Oo79Slcvd3YuqB8bL3N4C7Ubiovcj23/zSunq5k3JYZX738va0qj92BMBg4vv0wrfvI5acuUqEpUaNNzUaSJCQbJUpPV2wDvNH+TT2wBp8RfQnbshCH0NrY2tsREFROiucf6Ed6WqZFmrTUdHZt3wvA7t/20bhpWKX+/dwcSTNR40svKMHX1dGq7a7YBKIfrXdP+a8qDLqqbw8rHqZGQSWECAfqInOam84pYGRCPYXMmrrVMnmZ3dolS5bUbdy4sdPn/edxeU8MEU/I6k/BEaFoClUUWuHxb/V0N0K7PMrmKSvMvlrcA70Z/ul0Cha/jcLHB4W/P9jY4NCtB6V/HTHzoQgsH/GyCQ0DWxtEQflkl2bvHvQpybzSdxon9hynm5GfvmFEI0oKS6w+sP4mfO+te7Uh+UYSceeuE9QgiICQQCRbG/xHRlNw/BJ6k7Hh+9VTOPD1bhIu3GT91I8eSAOhOmBQF6DLS0aXl8zFPTFEGsuxTkQoqsISq+XY5unuNOzyKN9WKMd3Ok/lnU4vs7j9ZIRaQ84nX1Ny8OR96QwAGPILSXrqJVb1ncOlPTGEG/NW21jHiqzkreXT3Qjr8ihbKuTt+Ne/s6rvHA5/8zup127T9gmZRrre39zzDk/3oEmXFnw+5UMzXyd/OcTSga/zRt9X0KpL0Wl1qItUNIhoSElhCflW6lgtk/KL6NWaVGP5uRvnMorPXcehUR0kWxsMRSo8B3Qm//eqrUq28XJD6eZM1pc7uDpoNpr4FA7+cYTBQ+UpwvCWzSksKLIqVvX7jgN06CzPXbTt2JJbNxIrPU/TIG8ScwpJzi2SNTcuJNC1cZCFXaG6lFPxGXRvXLtK+b9nCKnq20OK/zl1dmWoQKkdAfyCrIIUhMzn0UySpKZAKyHEl5IkjTT+P7kyn3PrPSsA+s8fSVjXFmhVGn6ctYZkY2jmC1+8yk+z11KYkcf8uK/JS86itFh+sV7cdZL9H//E4HfG0bRPG2yzUpCcnFB4+2LIykS9ewcl327Eod8AANS/bsPx6WE49IoCvQ6hKaVo7eqykFTXOf/B9tFwFO7u5GTm8d3yTdRvVp+IrpHGkNSPuXEhTs73hv/wyasrycvMZdEP7+Do4ogkScRfvsWauatRFanoP3Ygz782AgWgvpnChYFv4DOwIyDrKQCELB6LZ/eIMj2F4nM3AGj284IyPYX4eRvIN+o4nBvQjmfmjcbFyw1VQTG3L8eTGZ9G067hZRoICRfkkEZTDYSZ38+30EBQF6nuSnNhqs/g7eXxt/oMc1vNZdD8UTTq2oJSlYbvZ60hyZiX0V+8yg+z11GQkcuSuI3kJWehMZZj7K6T7P34RzNf8zbNwq5BXYRGQ8FPe8hbu8lMZ8D37Wk49+qELlXueVWmM6DPzmX7Bz9xassB+s0fSUNj3n6ctYYUYx17/otX+dlYx96O+5p8k7xdMtYxF193Jm5biJ2LI0IIFEolRTkFaIrVfD3rExKN1/nSF6/xzew15GfksiJuEznJmaiL5fmRs7uOs/PjrYREhjHi/cno9HqS45IozivikfbNKFVpWDdzJbcuyHVg5oa5fPbqJ+Rn5vHGD4vK6lji5Xi+mLsGdZGKXiP60PO5KLx0ehR2tigc7RE6Hdmb/yBtxff4PCdHmWVt3IWNrweNf3sfpYsTwmDAUKLmUo/J2NeuRd3l05CUClBI5G4/Qqd3lvH2u6/RpUcH1Co1r748jwtnZYmAzzet4LXp88lIy8TVzYUP1ywmMMif4mIVb8xcxJWL1/Cp5c0ve7/BxdUZF3sb0JWi3rmKQ5dusWynUdcisj7jujbj+5PXARjSWu5l/HLmJkevp/Du0ApBIoDj02898Js6rUu3Kr9Q/Q8eeChbhoeyUTD+3o48mXwIY6NQwX4kVWwUqgPTwqqP+2jCtYrS1PePmaXVx330pX31dhwfVu6jCS7Vx1f0RdE9TLjeBTlU35hCoag+X9OrmfvoKVXlX/z3iurkPqqORiG1U/cqv3MCDu9/KBuFh2bxmmmDYPzd3+SnBYOZEGIDsOG/m6sa1KAGNag6HuYJ5KrioWkUalCDGtTg/zoM+ofy4/+eUNMo1KAGNahBNUEYahqFhxqvRFTfPEDno3fn8qkqYhZXi742AKfnxlebr+rUQYbqnQdYFLOo2ny51O5abb6yxreoNl+KSkIo7wf5+ysPPb1XvJNiubDsQRD7Vvu7G1URL7xafVrU3z/94D4ekinaB8K/ulGoQQ1qUIP/Jf4NPYWHaZ1CDWpQgxr8n4YwSFXeqgJJkqIlSboqSVKcJEmvWTk+XJKk88btqCRJD9x1/Vf3FGwj2uA0ZgooFGj2/ob6R3Oqa9s2HXEcJlNdo9dT8vlKdJflmH33Nd8hVCow6EGvh44jAHh90Qy69OyASqVm7ssLuHzBkqpg0Udv0qpDJEVGUrW5L8/nysXrjHrpOfo9GYV9gDOHjsew+KNP0OdnMbh5bUa3s1yteTIxi2X7LqLTG/B0tGP9sx3LDwY2JLtpFA16KlBv/JPklZayrCELR+PZMwKDqpTrU1eWUWcHju+H3/CeCCEouZzI9WmrEBotti37ceTCdRa//xEGIXhqwOO8UM88nGLDgXPsOC2vp9AbBLcy8tg/7zkcbG0YvfpXtDo9OoOBXs3rA9VHd23jHYK+MANRWmyRHu6dhvuD998mOroHJSUqxo6bwdmzsRY2f/yxFVcjJYOvrw8xMWcZMnQsXbq044fv1xMffxsnb0f0KbewqdsIFAq0f+2hdO8PVs+pqBOG04z3UG9Yiu6sceGjozMOw15GEVAHSZLQntyLbZvHQKFAF/MH2oPm5aoIaYLDc7Mx5MprKPQXj6PdL5/P7omJ2DRqiSjOJ3//COzbtsZ92mRQKinZ/htFX28y8+X4WC9cnnsGAKFSkbfsQ3RxN1DWCcZr/n/K7JYGBLJj+fd4B9eiSfcISlUavpm5miQrlN4vfDiFYGNZJp6L47s56zDo9PQY359Wg+S1AQ5+dkie/qg+e5Uj126z7NA1DEIwqEkgo1vWs/AZk5TLssPX0BkEHg62rH+ipdnxUfPGEdm9JRqVhlUzP+KWFXrwiUsnU795KJIkkXorhVVGCnonVyemfDj9DrvAReA94AurBVgFVOfwkZHyZxUyk0MScFKSpG1CiEsmZreArkKIXEmS+gBrgQcaB/7HGgVJkgYDPwKPCCGuGPe1AZYiL1grBFKB14QQFyRJmgeMA0zXw3cTQlgu95ShdBo/jcJ5r2DIzsRt6RpKTxzBkJRQZqA9fxrtCfnhVNatj8vMeeRPeaHseOGb0xCF5SuSO/fsQN2QYPq0e4pHWzbjP0tfZVgf6xTO77+9gj2/7jPb98UnG/nik40cX9iJ+RsOs/6j9/A6/RPDvzpE11B/GviUM4YWqLUs+f0Cq4a0JcDNiZxijenNQ9tqAJ+/8QqXD9zgsx+/I2dPDKpr5ayQnj0jcKwfwOn2U3CJDKPBu+M53/d17Py9CBjbhzNdpmNQl9Jo7Qx8B3UkY/MB1Ce3Mf/dLXw6vi9B7fvy9NS5dHyqHQ38ysndRnZrwchu8sfIn5cS2HjwAu5ODgghWDfhcZzsbdHqDYxatY0u3XuX0V3XiQhl8KIxrBz0psW9OvPzETZNWwXAsx9Poc0z3Tm2UaY3KKO71qos0pliUN/ePPvkAOYseO9v7QCio7oTGhpCk6adadMmghUfL6ZzlwEWdj17Pln2/3eb1rD913Jt7SNHTjD4iVFkTYjA+c01lKx6A5GXjdPM5ehij2NIM9e2QFJgP2Ak+stnzHY7PDEe/eVTqD9fgsLTDcepH6L+/G1EQQ4OE5eguxyDyDRn+9THX0bz9TsW+dWdPoDu2C7sn5oMCgXuM6eSPXUW+oxMfNd/ivrQUXTx5fVfl5JK1qRpiMIi7Nu1wWP2K2SNewl94m0yRxpp0hUKXH7aSklBMY1D/FnQbSr1IsIYumgMHwx6wyIPMT8f4qtpKwAY8fHLdHimB4c3/s6+tdvZt3Y7AMtWdMMmvAd6VTHv/HmV1QMj8HOxZ/iWk3QN8aGBV3l0eqFGy+I/r7BqQAQBrg7klJSanS+ie0sCQgKY0vVFwiIaMm7hROYMmkVFbJi/voxxeMSbo4ke8Tg/r95K1At9Sbp+m3fHLOL7hF+6AVeBb4BSCydVgEFfrYMvbYA4IcRNAEmSvgMGAmWNghDiqIn9MeCBl2r/k8NHw4DDwDMAkiT5IS9WmyOECBNCRAJLkFc138FyI732na2yBgGgjSE1GUN6Kuh0lB7eh12bqlNdW0OP6C5s+15mAD1/KhZXN1d8at374qXY1Fzq1KlDoDoNW6WCqEcCORCXZmaz83IyPRoGEODmBICXczl5V56zH/EJCXT1s0Wn1ZH58xG8oswnr72iWpOx5QBwhzrbCdtaMm2BpFSicLADpQKFoz2lafKkZGxiJsE+btT2dsOhbhOiHw3hwMUEKsPOMzeIjgiVfUoSTvbyQjqd3oDOYCC8d9tqobu+sPO43GP7G9wLDXf//o+x8RuZKeXEiTN4eLjh71/5ZKqLizPdunVg27bdFscUdRtiyExFZKeDXofu9EFsmltyP9l27Yfu3FFEkUmVdXBEGdoU7V9yY6MICMGQnYLIzQC9Dv35I9g80srCV2UwxF9GlMi9U9smjdElpaBPkeu/au8+HDp3NLPXxl5EFMr2pRcvobTCFmvfKpKshHRCIhtywoTSuzIa9UsmZZlQoSzvQNmwFbrrMcSmFxDs7khtd0f5OQjz48BNc7qLndfS6dmgFgGuDgB4OdmZHW/duw1/Ginor5+5hrObMx53paC3K6MGEULg6FL27Lsg0/bf98q/eyHEkyRpvCRJMSZbRcGLIMD06yIJc/boihgDPDBF8T/SKEiS5AJ0RL6IZ4y7JwNfmrZ8QojDQgjLcZGqIUifVU4QZ8jOROFtWelt23bGfcVXuMx9h+KVJitwBbi+9R5u763Fvre8jq5WgC9pyellJumpGfgF+FZ0CcDLr7/Ij/s3Mnv+NGztzFcdZ5ToCKxbH/2t8wD4uTqQUWge3ZSQU0SBWsuYTUcZ9uVBtseW143fbhYSaFNaxqhZmpqNfYD5w2cX4I3GhGpak5pTRoqXvHobrU6tps35degLSsgzUjhnFBTj7+GCwqs2aEqo5aQkI9/6cI2qVMfRq0n0al6vbJ/eYGDoB1vp8fbXtAsLopZfrWqhuz72zd5K09wPAgP9SUoqJ9lNTk4lMNC/UvuBA6PZv/8IhcYXKEDbti05eWI3DkMmIjTlLxxDXhaSu/mHguTujc2j7dEeNn9eFd7+iKICHIZPw+nVj7Dt/QyisLzREAU5Fr4AlHUa4jB5GfYj5iDVsv5hqPT1QZ9eXv/1mZkofSunCHfq1xf1X5Z8Ro69enBq2xHc/TwrlGX2Xcuy9eAuXK5AD27rYIeybhP0cWfIKFbjZ3zZA/i52JNp2iMGEvJKKNBoGfvjKZ7dfILtV1LNjnv5e5NtQjWenZZVKQX9S8teZl3MlwSG1mbnBlnPYdeXOwgKDWbtyS8ALgBTeQBia4OQqrwJIdYKIVqZbGsruLM28WB1gEqSpO7I79PZ95v3O/inegqDgF1CiGtAjiRJkUBT4G7xZdON6mxnJUnafxdbK1zLlkba44fIn/ICRe/MxXFYOdV1weuTKJg5jsIFr2LfZxAt24UjWXNpxefyRZ/Qr+NQno4ahbuHG2Mnv2B2XPIOQqiKoNSkp1LBtd4guJyWx8on2/DJkLasPXqdhJwiDsal4+xgg4ej+ReTBV1JJRTMSndnvKJbE9NmEidbjEfhZI/vk53NrkVZuzH65CtW83UHBy8lEF7PD3en8odaqVCwZcaT7H7jWWJvZ6KTLJ+t+6K7NlRvnJ91SvDKz/H00IFs3vJL2b0pIQEAACAASURBVO8zZ2IJa9iO1m2i0F0+hU2j8IrOzH7aPzEOzbYNlstdFUoUtRtQengHJUungk6Lwr+C8EsFX4aUW5Qsewn1ylno/tqJw/BXK7vKKl+jXWQ4Tv37UvBJhXeSjQ32nTpwdsexSqnYK8PQBWO4ceIyN0+ay2w269USQ+pN0FjXOqgIvUFwOaOQFf3DWTUgnHUnb5GQW572XvL1yayPmdBmFMlxt+nQX67z4V0jiL94i/GtRwGEAysBtyplzgqEkKq8VQFJgKnoQ22sSAZIkvQo8BkwUAhhSfl7j/inGoVhyPoIGP8Oq2ggSdJxSZIuS5L0kclu0+Gj7hXTGNONlyQpplevXvPTnMs5hhTevhhyKqe61l06j8I/CMlVTiNy5Xtr16EbCg9P3luzkMz0TPyD/MrS+AXUIsMK5W9WhpxWW6rlp+9+pVlkE7PjgU1bkppYPhmWXqjG18XBzMbP1YEOIbVwtLPB08melsFeXM0o4GxyDn+eu/b/2Dvv8KiK9+1/ZnfTe6+00HvoHQIIhCIIUlUEBOlVuo0mXQWlCCiCFRFRitJ7770XCTW9l81my3n/OGmb3UAC+1Vef3tf117JzjznmTlz9pw5M/PMfXMuQc+Uree4oUrjYklV7hRQDrKexGOXj2raLsCTrKgE3JvXQPMgBl22/kL8tpO41Ksol+nmRFRSOsqA8uge3yA6OR0fV1Pue4AdF+4SXqusSbqydCg+4e+yaNVaomKjLUJ3PeXIlwg7J5TO3ghbR7PHPwv5abifREYTHByYmxcUFEBkZLTZ4zw93albN5Tt2/PWh1JT00hPlx9MuiunQKlCOMnPEYW7N1KKMbeSsmQ5HPpNwmnaalShTbDrMQxV9YZISXFISXEY7t8CQH/9jNHIQLh6mvhCo4YseVSpv3UelEpwNJ0208fGovTLmxJT+vhgiDN9XqjKhuA+dQIJkz9ESkkxynN7bzTCxoZh379Psgl1eeGU3uFjuuPs5cof+Si9c1D71cbobsmiRb5O9kTnGyFHp2nwcTLWOPB1tqNxSS8cbJR4ONhSO9AdbeUm2Peein3vqSREJ+CVj2rcy9+bhGdQ0B/beiRXoKplj9ac3HE8J/sO8sJtpUIdPAMWjj46DZQXQpQRQtgiz6oY6cwIIUoir832zX7JfmH8452CEMILaAV8I4SIACYiK6ldBWrn2EmS1AD4CCgWe1zOkGzPnj3VS4SUReErU13bNm2F9nQBqmv/vOk5ZUh5hEolLyzb2UP2GoNm3w700ZF8NPYT9m4/ROcesn5tjTrVSEtNy+0A8iP/OkPr9i24c+Nu7ndnFydqtGjL/SdRPE7KQKs3sPP6E1qUM56+CCvvz/lHCegMBtRaHZcjkwjxcmZ0i8osah5A3aoVWdy3LdWEOx06diBhl7E6WMKuM/j2DJPLzEedrXkUh0udCiiyRxruzaqjvi1v8qtawocHiek8uHkVbVoyOy/cpUUVU7WrVHUWZ/+OomXVvLfahDQ1KWoN+ogLJO/5ltGD3ubSrlMWobue13Q0kiYdfVocUlbR3jALIj8N99YtO3nrTXkRuX79WiQnpxIVFWP2uNe7dWLb9j1oNHnTGn5++aYMJUCpAjsHUKpQ1W6O7vJJIx/pMwaRPmMg6TMGortwFM2Gr9BdPoGUmiRPN/nKv0Ph6oFQKBEevqBUoazRBN2NM0a+hHPePL4iuBwIBWSY6j1or99AFRyEMkD+/Tu80orMI8eMbJR+vnjOnUnijLnoH5pKVyqcnUhevIQFHSZzaddp6uej9M4shNK7Ua9WVG5eg+9GfWEyMrF3caBcgyro/5anTav6ufAgOYPHKWr5PrgdTVgZ4ymusDI+nI9Myr4P9FyJToGrh8n8ZS6Zv8zl9K4TtMimoC9fqwIZqekkmaWgz7u/6rxSj8d35fONexxL9SY1crL8gIrI8r/PBUkq+ufZviQd8rT6TuA68KskSVeFEEOFEEOzzT4GvIDl2TMoZwpxV2T8G9FH3YHvJUkakpMghDgI7AJ+FELszLeu8HyvhTJ0GV8vxmXap3JI6t5t6B9GYNdOjjLR7NyCbaPm2IbJVNdkZZH22QwAFO4eOE/OFpRXKsk6vIcj2Zz7zVs3ZvvJjWSqM/lwzKzcwr76aREfvzeb2Og4Fnw1Ew8vd4QQ3Lhyi5kT89YqXukQhoi+y5TW1Ri24QQGSaJL9RKU83Zhw/kIAHrUKk2IlwuNy/jQc81BhBB0rVGScj7Zo1rJgPb4H1TrO4FF3cYS9/Mh1Dcf4f92WwCivt9F4p5zeLSuTe0TSzGoNdwZuxyAtPO3ifvzODV3LUTS60m/fI+oH2Q9I5VSwYdjhvHu6PfQazLpUr8i5fw92XBcDnbo0Uge8ey7EkGjCkE45FsriUvJ4KP1BzEYJAySRNuaITzZeouEFjFMPrg4l+46B/nprrvOHkjS4zhG/jETME93/Szkp+Fu/dpbT6Xh3r5jH+Hhrbh+7QgZGWreHTw+N2/zpu8YOmxS7sihR8/OfLpwudHx3bp2YPDgvuh0euxdFWi2rMFx+Ew5JPXEbgxRD7BpIr88aI8+fd1P89sKHN6eAEoVUnIsmk0rse//AQgFunP7kWIeoarfBgDdqd0oqzXEpn5bJIMetFlo1i/K9WXXcwyKkKoIRxf8Nv6Cev9BvBYtAKWCjD+3o7sXgeNr8vpYxqatOA94G4WrK+4TxgIyRXjcQPlZI+zssKtXh6T5nwNOXNt/nqota/HxwS/IUmfx08SvcssdsmYK6yavJCUmkZ6zB5H4OJZxf8j3z6Udp9jxpbyoX6NdfW4cvkRlnRzYo1IomNy8IsM3n8cgQZcqAZT1cmbDFfmB3aNaMCGeTjQu6UXPdSdRCEHXKoGU88qLTjq37yy1WtZlyaEVZKk1LJuwJDdv6tqPWDFpGUmxiYz4fCyOzg4gBPevR/D1B3L9f/vyV0Z8NprPdn4BsBd5Tr7wKYVnQG/Z6CMkSdoGbCuQtiLf/4OAQZYs8x+nzhZCHADmSZK0I1/aaKAy8B0wH3mFPQb54syUJOlMISGpr0mSFFFYWQldW1js5CxLc9HMYr4sSXNRe5VlFNNyMG30WYv5stJcFA/J+5/7uWYCS9NczBtvObrxfp9ajspmw/3NL7wd+XKZV4v8zKl+b+tLuf35Hx8pSJIUZibty3xfzd6xkiRNB6b/TyplhRVWWGEBWLmPrLDCCiusyIXhJZbZLCqsnYIVVlhhhYVQxFDTlxr/6U5hyDnTHZfPizMLqzzbqIjwG7beYr4WeDa2mK8W3Rc926gYuFnBRDDvuWHJdYC0Rwct5iuspuXW+NSGp23QLx5esSvxbKMi4oPSkc82KgbazDMN435e/BL4cj2E9f8BltT/dKdghRVWWPFPwjpSsMIKK6ywIhfWNQUrrLDCCity8R8IPvq/0SlYgm/drnYJDp88zZy589FnqekaWpp3Glc08XP6fiwLd11CZzDg4WjH6r7yLtCUzCxm/nWOO7Ep+PipSErUM3v2R7RtF0aGOpNhQyZy8cJVE387dq3H2SWH09+Ls2cu8kbvoZSvEMJf23/Gz8+HjJgktvf/jLgrESbHu5Tw4ZVlI7B3dyb2SgT7xnyFQavH1s2Rlp8OxrWUL3qNlv0TvoZspod9ezfSoH5tJEli2fI1TJ4yy8TvgX2/4+wibyLy9fHi9JkLvN59IOPfG0qfPt0AKOntjSrQF93jKFI2bCNp9a9GPpw7tsR9YE8ApIxMYmctIeumfG18Zr2HU/MG6BOSeNhV3udoKQ0ElXsQBk06BrX5OfziajMAjJ05kkatGpCpzmT2uAXcunK7UNtxs0bRoVc4bSp0BMDFzZmpn00isJQ/Gk0WD/5+RPXaVchUZzJt7BxuXDZlL5i++H3qNAolLUUmLJw2dja3rt6hRbumDJ80CCdUGHQGEh7FElil1AvpWagqVsRz+XIMiYlIGg3qv/4i42djbRL7V17BsY/MViOp1aQuWoTurryT3+H113Hs1AkA9V9/wVzjjYlFabsPFk0itGFN0lPl8509bj63r97FvlE93MePAIWC9M3bSP3uF6PjHMNb4/J2nmZE4rzFaG/Lv7GAzT9hyMgAgwF0T2fhLSr+CyOFl0J5TQihz96ifVUIcVEI8Z4QQpGdFyaE+DP7fz8hxJ/ZNteEENue7tmYb33l1GW8+8kws3ZrZ65mYvuxTAgfQ9yTWML7yTdsDt96xpYvmDljBl+vWcPvw8LZcfURd2ONuWJSMrOYu+MCX/RsxO9D2rCwW/3cvAW7LtE4xI9NQ9sSG62jZcsWlC1XmtAarRgz8n0WLTZ98AKEt+1F00adaNqoE6dOnmdrNn1zzZpVuR/xkPNLt/D3tlM0m9Pf7PENp/bm0jc7WNd8ApqkdCr1DgOg9sguxF29z4a277Nv7AqaTO8LwJAhb1MrtBrevpVp064ngwa+QblyZUz8hrXqRt16balbry0nTp7lj03yzt3PPl9B3Xptqd8gHGFrg+bidR50GoRzh5bYhBhTZmgfR/Ok/0QedRtG4oqf8Jk2JjcvddMungzN03jOr4EwfMRklnw5x+z5tm79OvUbhFO/QTgnT55l0+a8HcVHj56ifoNwdEmPC+0QQNZmWPH5J4XmF0SjVg0ILhNEr6Z9WTD5cybMHVuobaUaFXB2czZKe3vUm9y+eoderfuz6ec/adyyAV0a9+aTiQuZOm9Cob4Wz1xOnzYD6NNmALeuysJHpw6fpVfr/izuMJXTGw5QMawmC8LGsfH9r+k627z2x/lNR1nYejyft5uEjb0t9Xvn0YoJhcBlyBDQakn/8Ufi+/XDvlUrlKWMifv0kZEkjhlDwsCBpH//Pa7j5V3iyjJlcOzUifihQ4kfNAjbRo0ILpNHL1Octlv2yUr6tx1M/7aDuX31LgqFAo9Jo4kdM5Wonu/g2LYVqjLG9dI9iSRmyDii33iXlNU/4vH+e0b5sUPHE/3mEKL7DS+03OLAwoR4/wpeik4BUGeT3FVFVhnqAEwzYzcT2C1JUk1JkqoAJvJ0BWEpvvUrTxIo4e1GsI8XNgLaVQnmwC3jqIztVx7SqmIgAW45GggyyV2aRsu5B3F0DS2da9uh4yus+/kPAE6fvoCbmyt+/uZpuEHm9G/eohF/bpUpKZo2a8DKFd9j0OpJexyPnasTjr6m0VaBTarw918yJfKt3w5Tpp2sWuVRPojHR+WRSdLdSFxKeOPr603XLu05c/YianUmx4+fQavV0fet7k+tV8uwJmzevMMovX69WgCk/LELdDrSth/AqZWxYLvmwjUM2ep0mZduoPLL473JPHsFQ3Iep48lNRCeheJoMwA0bdeYHb/J1+Xqueu4uDnj5WtKK61QKBjx0RCWf7LSKL10hVKcPSITBFeuURG9Xo+ntweXz13FxdW5WJod6oy833H5ZtXJTJG5ol5Ez0J7+zaGtDQMiYmg05G5bx92TQpoM1y9ipQmX0vttWsofOTfsqpkSbTXroFGA3o92gsXaB6ep2tS1LYzh8q1KqF9+Bj9Y1kzImP3fhxaGEfjZV26lqsZobl8DaVv4feYJaBHFPnzsuJl6RRyIUlSDDAYGClMeXEDkOlkc2wvPcufpfjWE6u2J6h6fbSntwISfq4OxKQaq4HlaiD8cIg+q/ex9ZIsUPMoMR0PRzs+/vMsvb7Zi5uHMpvTP69TefwkisCAwjn9X+3cloMHjuVy+hc8Pi0yASd/487O3sOZrJQMJL3BxCb++gPKtJeFeXxDQ3AJ8iY4KAAbGxVly5bG09MDBwd7bGxUlDczUsjBa6+1Z18BrQGA0mVKoHBzJn33EQB00XGozIi45MClWzgZR04Xmm9JDQSlqz8obQo9trjw8fcm5kkeoV5MZCw+/qbn+vqA1ziy6zjxBVg871y7S4sOMvVJSIUyuHm44hfom+0rBp8A8+02Yspg1u9dy/gZo4w0O1q2b86EvZ9SuWUtIw6p59Wz0F6/LkvTZsMQG4vSp/CHq0PHjmSdkl9EdPfuYVOjBsLVFezssG3YMPfcoOhtBzBk8kC+2/01o6cPx8bWBh9/b/TReeGt+uina0Y4d2lP5rF8mhGShM/SBfh9/xVOXTsWelxxYJCK/nlZ8dJ1CgDZ8nMKoOCr4DJgtRBivxDiAyFEoOnRxrAU33rWid/RP7iGTf3OYGOX7dv4eL1B4npkIkt7NWZ5nyasOnKD+/Gp6A0SN6KS6Fk7hPWDWiMZJFQ2xeP0797jVX7bsPWp52WqqVC4/sP5ZVuxc3Oi+47ZVOvflrir99Hp9aSnq1m37g92bF/Htj9/Ii0tHb2+cM2R3j278Mt6Ux2kunVC0ccnYUjJx+BZyPnZ16uJa7d2xH++utByLKmBYFAno3ItvEMpLopSN28/L1p2asFv35oS/f2wdB0ubi6s272GoJL+PLz3CF3+OW4zp7l0zkq6NXuDt9q/i6u7K/1HvJmbt3/7IT5tPYFHl/82mgoyV6/8KEzPwux1K8SPTWgoDh06kLpSHg3pHzwgfd06PD79FI8FC9DdvYten3duRb2uK+Z+Q5/m/RjUcTiu7i68Nbx3se5tuzqhOHVuT/LSr3PTogeNIbrvUGLHTMW5exeA5mYPLgYMiCJ/Xla8lJ1CNkxaTZKknUAI8DUy5/l5IYTRK4sQYvDUqVPv37hxI+OTP+dbjG/dz8WBqIREpLREhKsP0SlqfJyNCcz8XB1oXNYvTwOhpDc3Y5Lxc3XA19WB0FYdsOs0iu07txAbG0NwcEDusUGB/kRGFc7pX6dOTYKC/Dly/E+OHP+TyMhoo+OdAzzJiDaeJ89MSMXW1RGhVOSzkWmFtWlqDoxfxW/hHxB9/g5elUvy3ZoveRIZxaXL16jfIJyWrV/H3t6ey1eMhVLy6uVBvXq12LZtr0lerVrVcqeGAFR+3uhiTWnGbSuUwXfmWKJGTTeaLgJwfrU1qpKBBP+23KIaCLl6z+L5f/45+gxrd60iLioe33xvv74BPsRFG59r+WrlCC4dxPqjP/LbiZ+xd7Bj/RFZOyL89TZUqCbLmh7ZdwJ3TzeePHiS7cuX2ChTcrv8mh1bftlGtVqVAejZvxvrdq9h7La5RN18hEeQN44e8lTY8+pZuIwejTIwENexY7Fr2hSFjw/6ONM6qUJCcJ04kaQPPjDSZsjcto2EwYNJHDMGKSUFLz9P1u5aVeS2A3JHV9osLX+t30HlWpWIiYxFmY/GXOnng96MZoRNuRA8PxxP3ISPMSTn1StHX8KQmIT6wBGQNZFfCBKiyJ+XFS9lpyCECAH0yEypRpAkKUGSpJ8lSeqLLELRvED+qrlz55aqVKmS44edJluMb71qoAcPEjN4kqYhKymWndce0aJCgJGPsAoBnH8Yn6eB8CSREC8XvJ3t8Xd14O6x3Wj+XEK7tp3Zvm03fd7oCkC9eqGkpKQSbUawB+C1rh3YsWMfXy1fm7vo/NfWvOOdg7zISs0gI8Z08fTJsWuEdJR/6xW6NyNilzx3bevqiMJGCYAhS8edLcepVecVtmzZycABbwDyPL6jowOrvv7BxC9A99c78dc2Y60BAFdXF6pXq4TC2RFVkB+oVDi3DyM9m348Byp/H/wXf0z01IVo75uyXaZt3YvuwRMedR9uUQ0EobIDhKkSWjGQo8/Qv+1gDu08Qnh3md66au3KpKWkm0wRHd97ks61utO94Rt0b/gGmWoNvZrKi/u7/tjDoI7D6dNmAJpMDdosHelpGVSvXbVImh0t2zfjzo17cjkHTtKnzQAWd5hK1M0H2Dk7kJGY+kJ6FnE9eyJpNKStXYvmxAnsW7VCc8xYm0Hh64vbrFmkzJmD/pGxNoNwd8+1sWvenE+nLM5dMC5K2wFG6wzNw5vy940Ibly4gU3JIJSBsmaEY5uWqA+ZakZ4LZhO/LS56B7k1UvY2yMcHXL/t29YF8A0nK2YMBTj87LipQtJzX7zXwEslSRJyj9EFEK0Ak5IkpQhhHABygIPnubPUnzrTtVb8pFPIwYOHCRrDdQsRTkfVzaclcPbetQJIcTblcYhfvT8eq+sgRBamnK+skbQ5LY1eX/TabQGAzY2gs1/7KNZ0xZcvLyfDHUmw4fkySr+9vu3jBw+Jfeh93r3Tiz63Dg08vyFyzRqXA+nVxyQJMhMTMXG2QFtmpoO303gwKRvyIhO4sTcX2izbCT1J/Yg7koE1385AIBHuUBaLR6KQW8g8fZjDkyUh9Xbtu9lxVcLyUi7h15vYMLEGSQlJQOwdfP3DB46MfcNvVfPzixYuMykzV/r0p7dew7RfP9pAlbOQSgVpPyxC+3d+7j2lOduU379C49hb6Jwc8Hnw5GAzOf/uNcoAHwXTMGhXg2U7m6U2vMjftPnc+/eA4toICicvNCnmh9lQPG0GUB+4Ddq1YBfj/5IpjqTOe8tyM379Pu5zJv4qdm33xyUKl+Kj76Ygk6v596tCI7uO8Hm4+vJVGcyfVxelNWXPy5k5vh5xEXHM3vZx7hna3bcunqb2ZM+BaBVxzA69QjHQS/QZmZxY/+FF9ez0OvRXruGU9++OPbsSeb27egjInDoLGuTqLdswblfPxSurriMG5d7TMIQOZTYfeZMFK6uSDodqYsXk5qcN4IsattNW/oB7p5uCCG4ffUOC6csQq83kLhgCT5fzkcoFaRt2Y7u7/s4dZPDX9N//xPXQX1RurniMTk7sk2nJ7rfcBReHngvkPVThEpJ+o692NWoahwt8Ryw9AhACBEOfAEogW8kSZpXIF9k53cAMoD+kiQ9S9b46WX+03oKZishhB5ZNNsG0AE/AJ9LkmQQQoQBEyRJ6iSEmAgMyLZRAGskSfqsML89SnWx2Ml9P+u/z300MvpZstfFgyW5j6rcuWYxXy8v91GWxXxZkvtovIW5j7rdttwEhSW5j0qc3vvCzrb59S7yM6dD9C9PLU8IoQRuIUdkPkKeGekjSdK1fDYdgFHInUID4Its1crnxksxUpAkSfmUvAPAgez/FwIL/5laWWGFFVYUDxYeKdQH7mQH3iCE+AXoAuR/Q+qCrGQpASeEEO5CiABJkp67J38p1xSssMIKK/5/hEEU/VMEBAEP831/lJ1WXJtiwdopWGGFFVZYCMUJSRVCDBZCnMn3GVzAnbmuo+D0VFFsioWXYvrof4Xvppa2mK/RH9+xmK+oOW0t5mvX3JRnGxURKYu6WswXwJyFhYf+FheW1EK25DrAgYvfWMyXIeHJs42KCO3XhS61FRvdfrG3mC+AnW85WszXgF8sw1kEsMECPorzNJYkaRWw6ikmj4D8i0PBQMEfSVFsigXrSMEKK6ywwkLQCVHkTxFwGigvhCgjhLAFegNbCthsAd4WMhoCyS+yngD/8ZGCFVZYYcU/CUvGckqSpBNCjAR2IoekfitJ0lUhxNDs/BXANuTIozvIIakDXrTc/3SncDQiloUHrmMwwGvVgnmnfoiJzZmH8Sw8eAOdXsLdwYbVPRug0ekZ+OspsvQG9AaJV8r7ATIdc+9pA6jesjZZag1rJizjwdV7Jj77zR9GqRohCATR9yJZM2EZmoxM/MsG0n/hCBxqlEF7fAu6czIRmKJUFWxb9AShQHf1KLozpiRuiqAK2LbogXD2ABtbpKQYNLu+A0zpth1L+lB3xShs3Z1JunyPsyOXI2nlYXb1T97Gr3UoenUW58asIPlyBM5lA6i3chT2/ioOnzjFnCUr0Ken8lp5T96pK/MeqUJbY9ukKxmrJ3PmzkMWHrqJziDhbm/D6u4yh9L0PVc5dC8WTwdbfntLDpXtOO1tKrQMRavOYuOEFUSaoW7usXgEgdXLYNDpeXTxLpvfX41Bp8e7bCDdFg4hsGppDGf3oipbDRQKtMd3kbXnN7PXXFGyPI7vfUrm2gXoLhyVEx2csO8zGkVASZCgasR82nRp9cJU10GlAlC6BaJPiwW91uyxxaXhPnL2MvO/XofBINGtTTMG9uhglJ+Sls7HX6zhYVQsdjY2zBjTn/KlggH4+ItvOXj6Ep5uLvwa6o6yYi3sOg+U2+zUHrT7TSk2ABTB5XAYNY/MHz9Df/k4ADZNO6FqIG8q6+q0jT9Wb2L4jGHUa1UPjVrDp+99xp0rhU+pDp85jHY929KlkvGUZIWaFXCauwgpLRmyNGhP70F74I/C6zViLpk/f55XryYdUdVvAwJ0p/bAL5stQo3vHegD8s30KbCm0BN7Biy9KU2SpG3ID/78aSvy/S8BIyxZ5j8+fZSPJvuKEGKrEMK9QP5FIcS6AmlrhRD3svNuCSG+F0I8dYW9YsWKynn7rrH0tbps7NeUHTcjuRtvTNqWmqllzr5rLO5cm439mrKwUygAtkoFq7rX49e+TfjlrcYcux9HikinWlgtfMsE8EHYKH54fyVvzn7XbNnrZ61lZvuJzGg/gYQncbTsFw5AelIav0z/Ft25PflPDtuwPmg2LSXzhxmoKtRDeBrvlMbWAduWfdCe34shOgL1tx+QtfcnbFu9Ybb8qh/24e7K7exp/B7apHRKvSHv6PZrHYpziD97Gr3HhQnfUHP+OwCk3Y1k/yvvk75uLjNnzuTrJYv5fWBLdtyK4m58GsLZHWWJShhSE0jNzGLO/hssfjWUjW81ZmGHvLn+VysHsqxL7dzvFcJC8Srjz6Kw99j0/jd0nv2O2fpe3HSUL1pPYEm7ydjY21I3m69HnZTGX9O/48g3f6Gq2ZiMFdNInzMcVZ0WKPzNxOELBXad+6O/ft4o2b7bYPTXz5IxexgZ80fhG+BtEarrfm3eRZ8Wi9KpcBK24tBw6/UG5qz4ia+mj2PTsllsP3SSuw+Mp4e//vUvKoaUYOOSGcweN5D5q/Julc6tm/DV9HF5bdF1MOrVs8j4dDSq0KYI32DTQoUC245vo7+Zx5Sq8CuJqkEb1F9ORL1oHA1atWlxFQAAIABJREFUNyC8dzuCygQyoNk7LJ78BaPnjCz0PMrXKI+zq7NJukKhYNDUd0CnI2vfb2R8PgZVzWaF16t9X/S3CtSrfhvUSyehXvweykp1aNWrjUWo8Se2HwsQBnwG2BZ6cs+AhaOP/hX8G2sKOTTZ1YAE8vVyQojK2XVqLoRwKnDcREmSagIVgfPA/ux5tsJQv4S7I8HujtgoFbSr6M+Bu8a7WLffjKR1OT8CXOXt7p6OOUR3AkdbeRClM0joDBIgCG1bjxO/yxuf/j5/G0cXJ9zMUBFn5qPhtrG3zSXpSo1PIeLSXTDkLY4p/EojJccgpcSBQY/u1mmUITWM/Kkq1Ud/9zyKgBB010+AOhVD1D2EnQN2ZuiyvZtU5cmfJwF48OthAsLrAuDfrg4Pfj0MQOK5O9i4OhodfyU6mRJ+PgS52KHKSKFdeX8O/B2LTZPXyTq2CSSJ7dcf0bqcLwEuOW2WdwnqBHngZp/H1lm5bR0u/C6X9+j8HexdHHE201638lE3P7p4F9dsJs/0+BQeX/obZ283pLQUpPho0OvQnTuEqnpDEz82LTqhu3gMKS0flYO9A8pyVdEe3yV/1+uo26yOxaiu0WsRShUI81ttikPDfeX235QM8CXY3wcbGxXhzeuz/6RxB/f3wyc0qCFvpCxTIoAnMfHEJ8o7zutWq4hbtiCTomR5DHGRSAnZbXbhCKqqptQ+Nk06oL98HCk9OTdN+AVjuH8TtFlgMHD55GXa9wln90aZ4+rG+Rs4uTrjWUibvfvBIL6ZY0pu2GVAZ25fuYOkTpNHCnoduotHUFUppF5Xjst2OfXyDcLw4FZuvfT3rtG6TxuLUONnwxn5maQzcVBEWAnxXhzHMY6pfQN5N/MuoLO5AyQZi4AooP1TfAf5ueQR1vk52xObZszRcz8xnRSNjkEbTvLGT8fYei2Pf0dvkOj141Far9xHw5JeuEqOePh5kvAkj64gMSoe90KoiPsvHM5np7/Gv2wg+9ZuN2sDIJw9kFLzuJiktCR5iii/jbsv2DmiKlcbmwadUFZqkGvrEGBsa+vpgjYlPZcuOzMyPtfGIcAD9ZO8iKDMyASj42PSNASWLI3+9tnsNrMjTuGElJ6EFC+3TQ49+KCNZ3hj3Qm2Xi880MHFz4PkfOWlRCXg6m96w+ZAoVIS2rUpt7Opm3Ng5+SApE7P/W5IikO4GdOfCzcvVDUaoT1i3NYKL3+ktBTs3xyL46QvsOszCv9AP4tRXQuVHShUoCh0/2WRER2fhJ933u/Jz8uDmHhjrqIKZUqw97h8fS7f+pvImHii4025vISrJ1JSHmmdlBxv2maunqiqNUR73Hi60hD1AGVIVXB0ARtb6rWsh4ePB7FP8ri54iJj8fI3paDv3P9VTuw+YUI66eXvRZPwxty8cBOy8u5DuV7G95Bw9URVtQHaE7uM6xX9AGWZKuDoDDa2qCrWxt3b3SLU+KtOrwGZVWEMLzALJBXj87LiX+sUsrdwt8Z4Nb0XsB5YB/R5hotzyEyphRbxrBS9QeJ6dDJLXqvDsm51+frkXe4nyg8fpUKw/q0m7BwUxpWoZNJF5lOpqAti7cTlTGgwhMg7j6n7ajGpKAo6VShR+JbEEH2frMO/YdOgo9xRmCvfLJtwttGz6i8UCBcPdHey306VKhR+pdCe+ivXRG+QuB6TypLOtVj2Wm2+PvV3bpsVhHlqY7OmAHSeNYCIUze4n03d/LRzKnjidt3eRbNlrSnJnUKJIrgsWUe2kbFgDGg0BJUxZVx/HqrrtbtWobB3RdJpTGyeC2Z+TAWbcGD3DqSkZdBj9HTWbd1LpZCSKJVmOqQi0ErbdR6IZtv3Jm0mxTwia//vOLw7DYdBH/P3tb/NX7cC/jz9PGnesTmb1mw2MR02bSjfzPnW/P1SIM3u1XfQbP/BTL0ek3XwDxwGTcfhnY8wREYU4q/41PiD6w0ACAWWAq5mHRQBOlH0z8uKf2Oh2UEIcQEoDZwFdgMIIeoBsZIk3RdCPAK+FUJ4SJJknuvX/KOC7A0ggx0dHZ3OudrlpkenZeLjZGdk6+tsj7uDDQ42KhxsoHaQB7diUynlkTdz5VGnJYu6TiA13cDjixF4Bua9hXj4e5EcXXgsvmQwcObPY7Qb3JljGw6Yt0lLRLjkvT0LZ3ek9Ly3Q1WNFijLhiKEQH/vMsLWHsPj2yi8gxHO7mRGGTdPVnwqNq5OCKUCSW/APsCLzCjZn/pJAg6BeW9l9gGeRscHlK9E5JEbUEJmFI3RKvELLIF9rzdz6xbUJBz38/txsFHiYKOU2ywuLbfN3Gq3ZMnrk7D3dCJ19y3c8pXn+hTq5pZjuuHo5crmIYtM8jRpaoRD3ryzwt0bKcW43ZUly+HQb1J2PV1RVqkLej36iBtISXEoS5bHvtdIhJ09tlnKYlFdA7lU172a9iUjLSOXuO3AxW9QeZQAg/mF5uLAz9uD6Li884qOT8TH03i6zdnRgVlj5bUZSZJoP2gyQX6moxwpOR7hnpcu3LxM2kxRoiz2b8rEgsLJBWWlOmgMevRXT6E7vRdhY4uqQRuahDfmScQTfALzmGa9A3yIL/DbL1e1HIGlA1h7WF6ntXOwY83hbxnQ7B0q1CjP+8umYmNrg/Byw+61wWj0evP1Ci6LfZ/3jOul16O/ll0vlQ2q+m1QVm1A4s3I56LG7zykKwc27KVlj9b8sXxjTvYd4B7yy+apQp08BS/zCKCo+NfWFIBSyAs6OWsKfYBKQogI4C5yb/36U/zUAq4XTJQkaZUkSXWDg4Or61HwODkDrd7AzptRhIUYa/aElfXl/OPEbKprPVeikinj6URCRhapmfJNnnbxIKP7v8HETiO4sOs0Dbu1ACCkVnnUqRkkm6Ei9slHw12jdR0i75rSQufAEH0f4e6LcPUChRJVhXro/84TlNNdOojm98UYEiLR/X0JVZXG8jqEUomkyURjhi477tg1AjvJU0wlezYjaucZAKJ2naVkT/kNyaN2OXSpaqPja7TqSEREBI+T1Wj1BnZcvEWTxHNk/jCNzB+mIaUl0UR9i/P3Y0zaLAfJ5/Yzql8fMtfP49quM4R2k8sLrlUOTaqaNDPtVadXGOWb1+DXAtTNOUiNSkQ4uyI8/UCpQlW7ObrLJ41s0mcMIn3GQNJnDER34SiaDV+hu3wCKTUJQ1IcupsXyFgwGu2ZA1y/cPOFqK6dXZ1Q2cjvU8LOBUmbWfiQsRioWr4M959E8ygqFq1Wx45DpwirH2pkk5KWgVYrT3lv3HWI2lUr4OzoYOLL8PA2Cu8AhIev3GahTdFfM1a2y5g7lIy5Q8iYOwTd5eNofl+J/qr8LBRObmiPbSdzzRzSktPYtGYzbV5vDUClWpVIT003efie2neK3nXe4O3G/Xi7cT80ag0Dmskd2NtN+vN243682eAt0GaRtXs9+pvnUNVsiv56gXrNH0bG/KFkzB8q12vTKvTX8tXr+A4yv5sL6jS2f7vVItT42fBDXrM0DV8qIv4LC83/WkiqJEnJQojRwGYhxEqgB1BDkqTHAEKIlsCHgNGW0Wyq2FHI0pyFUt3evHlTt3PyGwz//QwGSaJL1WDKeruw4aLMtN2jZklCvJxpXNqHnj8cRSEEXasFU87bhVuxqXy88xIGScIgQZsK/ly758jl/eeo3rIWsw8uIUudxdqJebTRo9dM5bvJK0iJTeKdz0Zg7+yIEPDo+n1+/FCmpXb1cefDLfNQeToCEqrQVmT+OIOsA+uxe220HJJ67RhSQiSq6vLDVHf5MFJiFPqIq9g26YpwlBctbeuGk7X7u9zyG/40iQvvrSIzOomrs9ZRb+UoKk/pQfKV+9z/+QAA0Xsu4Nc6lDYnFqFTazg/Nm8BVelgi13pqkxuUYHhm89hMEh0qRpIWS9nNlyWqVX6AiFeLjQu5UXPn06gENC1ahDlvORIkyk7LnH2USJJmVrarT5EySR/KrQM5b2Di8hSa/g9H3Vz3zWT2DR5FakxSXSePZDkx3EM+UOmMr624zT7v/wDZx83hm35BDtnB4RS4PTRKqSkWLTHd2GIeoBNE3lJSXu08DUbAM1vK3B4ewIoVRjio5jXey7vTnrnhamuDXoDCltHOSS1EBSHhlulVPL+0DcZNm0ReoOB115pSrlSQfy6/QAAPduHce/REz74fDUKhYKyJQOZMbp/7vGTFq7kzOWbJKWk0T4mhhnuiwh7d1p2SOpeDNEPUTWUy9adeLp2tf3bkxBOLkh6HUveW8aFoxeo3qA6a498K4ekjv881/aT72by+aTFJDxl1JwDg96A/sEtbFt3x7Z5Z7Sns+vVQN7lrzu566nH2/ediHB0QdLr0Wz6mmN/XaByw2ovTI3/2c4vAPYCkwFTBaEi4mXWSSgq/nHqbCFEmiRJzvm+bwV+BUZIktQwX7oSeQt3bWAu0AJIARyBE8BUSZKM1TwKIGPFGIud3Jh5lqMg+GJc0YXYnwVL0ly0/ahogulFhSVpLiZ3ttx5hm/MsJiv/xs0F+pnGxUDv7/xktJc3N/8wu/vK4PfKvIzZ8ijH1/K8cI/PlLI3yFkf381+98fCqTrkUcDAP3/9zWzwgorrHgxSC/lY754+E/vaLbCCius+Cfx3BscXiJYOwUrrLDCCgvhvxB99N/uFDIsN3csWfByi5KlLeZLIy5bzNfWTxLpPL+kxfwlEPNsoyJC4WIaYfO8UBtMI6CeF5ZcB1B4mu6feG4U3K/xAhCW1h02Q4HxvIjTW1Yq9EXxMkcVFRX/7U7BimLBkh2CFVb8X8R/IfrI2ilYYYUVVlgI1k7BCiussMKKXOit00cvNxSlq2Ib1hsUCnSXD6M7bbzXTRFcAbsuI5CS5Y1Kujvn0J2QibJUtV9BVa0ZIGGIe4xq5SJ0Gi19pr1D9Za1yFJn8e2EpYXqKZSuURaBIOreEyM9hQELR2BfsywHfvqKuSu/xyBJdK1XgXfCjJlR1x68zLYL8sZKvcHAvZhk9n/UB3WWlg9/PUx8qpphY8fT6nhfbDL0nBq7ksTLESZ1cSrhQ6MVI7F1dybxcgQnRy3HoNUT2K4O1Sd1RzJISHo95z/+Acjk6N0oFuy+jMHOiR5du/Du22+hPbYRQ9yDXJ+n78eycNcldAYDHo52rO7bnIj4VCb9nscM8DgpnUClL+M/nETVlrXQqjV8P2E5D820V//FoyhVvSx6nY6Ii3f5+f1VGHR6HFyd6LtwGD4l/bD3tkGoVGAwoDuzF+2hTcbXskwV7N+ajCFRXsfQXz2Jdr+suWDbbRiqinWQ0pNRfynTOkycNYamrRuRqc5k2tg53Lh8y6Re0xe/T51GoaSlyNxO08bO5tbVO7Ro15ThkwZhMEjYlPTnwF+/M2/Z6hfWQNi8zpRZND+Kq82grFgLuy7vypvXTu5Gu3+jWTtFiXI4jFpA5o+for90DACbZp2z9RQkpjS7x2fjP2fQ+wOp36oemWoNn733GXeu3C207OEzh9G2Zxteq9TNKL1CzQo4Tl0ks7Jqs9BdOIj2+J/G9SlZCfseYzEky5sC9TfOoD2Sj09JCOzfmSkTSX41kVEzh9OgVX0y1Rrmj1vI7afoPIyaNYL2PdvRoaLMt9lraA9e6do6J/sKUBnwQWZLLTasI4XnhBDCC3n3IIA/oAdytoW2Q960NlKSpJXZ9i7ABSBckqTbQggbZEK8QZIkGfMd5EFp2+oNNBsXIaUmYv/mB+jvXkRKMF6YMjy+g2bTEqM04eyOqlZrMr/7GHRabDsOof6rTUiNS8a3TADvh40ipFZ53po9mDmvTTUpeP2stbn02T0/7EerfuFs/2oT6UlprJv+LRPmvcon3/zCigFt8XNz5M2lW2lRuSRl/fJ4bvq3qE7/FtUBOHjtAT8euYqbox1ZOj3jO9ajau36iNK1CWvenrGVO9B63iD2dJxmUpcaH/bm5qrtPNx8gjrz36FMnzDufr+XmMNX2LlTZtt0q1yCxqtGoz/yJXN3XOSbz2bja0ih9wef0UQfQdl8bJgpmVnM3XGBZb2bEODmSEJ6JgClvVz49V355tIbJNp+uY3WzVrhW8af6WGjKV2rPL1nD2Lhax+Y1PH0piOsHStfgwFfjqFJ71Yc/nE34SO68uhaBF8P+4wl55YhJceRuXoG9sPmort+BinWeO+iPuI6mh/mmfjXnTuA7sQO7LrLGgBNWjWkZEgJujTuTfXaVZk6bwL9OhbUTJexeOZy9v51wCjt1OGzHNx5BICjRxYzZ/n3rJw+Dj8vD/q8N4uwBqGULZm3aJyjgbD4g5HcexjJ7BU/8s3siYCsgdC7Y2s+WPTsTXCvdWjDG6935v1Znz7TVtZTGIJ61TSk5HgcxnyK7toppOiHJna2Hfuhv5lH0S1cPbFp1omMBSNBl4WyxXgGTO6fracwkEq1KjFqzkjGdB5ntujyNcrj5FqQ+V6m1R44dQDotWiPbkF3/gD278xAd/scUpzxgr3+4S00v35u4gNAVa+dbG/nQINW9QkqE8RbTftTuXZlxs0dzfBXR5s9rkKNCiY6D+tXbGD9Clmdef+j3VOBcTxnhwD/XPSREMITmTy0NBAB9CzIEyeEKAF8j/yMNQCrJEn64lm+/xWWVEmS4rM1FUKBFcCifN9fR96x3CeffSowFcjhlZgAHHtKhwBQX0qKRUrO1im4cRpl2dCnmBeAQgEqG5k51MaWpOhEQtvW4/jvB4AcPQXHZ+op2Nrb5tLi5OgpXL55h5L+PgR7uWCjUtKuZggHrj0w8ZOD7RfvER4qq8b5uDpSOcgbZUB5eHwVH4MDt89fwcbVEXsz2gp+Tavy6E/5DT7i10MEtZe1FXQZecyeKkc7kCSuPEmghJcLpWo2QBFxgXZVgjlw4xFoM/PqcuUhrSoGEuAm70r1dDIVdT8ZEUOwhxN12zbk5O+H5LKz9SdczbTX1QN5D6T7F+/gkd0JBZQP5ubRy5QOLYch9hHC2R3sndBfOoqqct1C26sgDBHXkTLyBJbCwpvx5wZ51Hj53FVcXJ3x9i36LnN1Rt71vXz7HiVLlrCIBsKzUBxtBkXJ8hjio/LpKRw2r6fQtCP6S8a6BbIDJdjYgkKBnYMdwSHB7DHRUzClQZf1FAayuhA9hTtX7iBlZiClp4BBj/7aCVQVapvYFgbh4oGqXE20Fw4A0KRtI3b9JotWXT93/ak6D0M/fJeVs79+mvs+yAzNzw0DUpE/L4gpwF5Jksojv2BPMWOjA8ZLklQZaAiMEEJUeZbjf1tPwRz6AOOB4PzqapIk/QoYhBCTgKHIncTTECSl5nX4Mhup6QNJERCCfd+Pses6GuEVmG2bhO7MLhwGzcdhyKdIGjXXDl/E3c+rgJ5CAu5mOOUBBiwczuenv8G/bBD71hqp6RGTkIS/d94N5efmSEyKefppdZaOY7ce8Uq10kbpwsGFmOhoIpUZBOudURfQRgCw9XQmKzlPWyEjMgHHfHoGQe3r0v7wQpr9MJFT41YRk5qJv5cHaNKxadydoOadiXMKlDvHbOToKQz84RB9Vu9j66X7JnXeefUR7auUwN3Pk8R8XPdP058AWU+hftdmXD0oi+48un6f0PAGuPt5gk6LcPdBkc2qWVAbAEBZsgL2Ixdi1+9982pe2fD19ybaSE8hBp8A8+ppI6YMZv3etYyfMQob27x2aNm+ORsP/0S8wRE/13y6HS+ggWBJCDcvYz2FpKfpKRhPq0opCWgP/IHTh9/g9PFa0lMzQJKIzXct4yLj8DKjQdG5/6sc332ChAKkdF7+XjQOb8zNC7eM9RRSEoxYgnOgDCqH/aBPsOs9HuGdJ7li2+ZNsvatzyUg9Pb3NtLGiIuMw9tMvboO6MKxXccLZVC1s7cDCAfMz7EVEYZifF4QXYAc8rPvgNcKGkiSFClJ0rns/1ORCUSfqlgJL1mnkD3c8Zck6RQyH1KvAiZjgfnAJ5IkPWuIZ0Y8wPirIeYB6m+mkPnDTLQX9mHXebicYeeIsmwo6tVTUa+aCDa2NHytmVmK+sLYMddMXM74BoOJvPOIeq82KXCIGd78QmLBD11/QGgpP9wcjWm/9QaJZbvO0T6zBPYozdbFnJ5BfpPH28+wvdlEjr6ziGqTesh7MYRAeAaiu3US3YXdCMmAqlqYUbnXIxNZ2qsxy/s0YdWRG9yPT83N1+oNHLwdSZvKQYWUX/gbUu9Zg7hz6jp3T98AYNdXm3B0c6Lr+31R+ARjiLyXp1pXwI/hyT0yFg4nc+lEdMe3Y//mpELLMa81YJq0dM5KujV7g7fav4uruyv9R7yZm7d/+yFeb/YmuoRHCHvjKYnn1kD4X6OgnkKXQWj++s50T4ODE8pqDUifM5j0mQOwd7TD20ynWfBaevp50qxjMzav2WJiO3TaEFbP+db89S94X0ZFkLF0HJnffIju9G7se4wBQFkuFCkjFUNURK6tec0OY4defl606Nic39dsMrXNRuM2DQGO8gJTR/CPiuz4SZIUCfLDH/B9mrEQojQys/TTZleAl2+huTdyZwDwC7AayD+xGA5EAtUKc5Cjp9C6dWunbz+dQ85PWTh7GMs0AmTlTYsY7l2BVkqwd0ZZoqIsj6lOQ1UzDIVvSXp9PIDzO08V0FPwJOkZegqn/zxGu8FdOLphf266n5cHUXF5b1LRyRn4uJonCdtx8R7hoWUAUJapjap0TSTgyMnTvFKvOnEb5AeyQ4An6ijj89PEp2Lrlqet4BjgidqMnkHsiRs4l/bFz9ODqEsPkTJSkOIeEp2ixtvZ3mhTlZ+rA+6OtjjYqnCwVVGnpDc3Y5Ip5SVPazz0qsqvGwcR6OFExM7reAR6Azez28uL5EL0FDqM6Y6LlyurhqzKTctMU/PDxK8oU7s84+b3QOEdiCExBmWFWiYc/GjypnT0t85D50GycliG3D6qWs0Rnv7Yj1xI7L5L+BnpKfgSG2VKjBkXI48KtVlatvyyjbeH9Tax8XO1IyomVlZfM+heSAPBkjDRU3A3p6dQDvu3Jsj5Tq4oK8u6BSiVSPHR2NRsiqpBG8rhjDojE598ugXeAd4kFGCSLVe1LIGlA1hz+FsgR09hNQOaDaRCjfJMXTZF1lPwcMMuvB8ag15WiEsr8JvId1/q716Sp7IcnFEEl0dZvhYOlesj7BxBIQhWRWZrY1zNrZeJNkbVsgSVDuSnI9/l1uvHI2t5q2n/XJuWXcLgBaeOoHjiOTnPqnxJqyRJWpUvfw/yekBBmC7MPb0cZ+QR0FhJkp7JLPlSjRSQp476Z2sqbAFqCiHKAwghAoHRQH2ggxCihjkHOXoKe/bsqR5cugzC1VvWKahUD/3fxjKPOOYJLCn8S8uveJlpSKkJKPxDQGWL7uIBDA9vsvWLDZzfdYpG3cKAp+sp+Objbq/Zui5RBfQUqpUvw4PIGB4npKLV6dl58W9aVDEVok/NzOLsvShaVpE3lenvnSNz37dMGjqAx9cvENYmHACv2uXQpqrJNKOtEHP0GsGd5Lnk0j2b82SHPI3hXNov18ajemkUNiqq+jjwIC6Zh7dvoHP0YOe1R7Rq2QJDct7wPKxCAOcfxmfrKei4/CSREK+8ee6Va77j2PKP0fy5hEu7TtGgW3O57Oz2SjHTXo17taJK85p8O2qx0Zukg6sjShsl9y/eRRkYgv7JPdBpUdZogu7GGSMfwjnvQawILgdCkdshAOjOH0JKiCJz6UQObD9Mpx5y21WvXZW01LTcDiA/8q8ztGzfjDs35MipEqXzRuDVqlXj/oMHPHoS+cIaCJZErp6CZ46eQrNcrYQcZMwZnPvRXTqWradwEikpDkWpimhP70G9aBwXj13i8onLvJJPTyEjNd1kiujUvtP0qfMm/Rr3p1/j/tl6CgMB6NdkAP0a9+etBn1lPYVDf6C/cxFllYbobhmvwQgnt9z/FYEh8rVUp6E9sAH1krGoF40g8+f56O9cYtm05bTt/goAlWtXNqvzcGLfKV6v3Ys+jfrSp1FfNGqNUYfg5OJIzYY1AEwl44qJ4qwp5Dyr8n1W5fclSdIrkiRVM/PZDEQLIQIAsv+apQ/IDsrZCPwkSZKpjKAZvDQjBSFERcBJkqSgfGkzkEcPs4BFwBxJkh4JId4DlgkhmkuFz0fosvb/jN3rY0EIdFeOIsU/QVVDFsnRXTqIqkIdVDXCQNIj6bRk/SUvQhmi7qG/fRb7tz4EgwFDzAMOrduNLktH9Za1mXNwKVlqDWsmLs8tbMya91k7+atsPYWR2Ds7IITg4fX7/PihfK1lPYX52Hs789G0GQyfvwB9ehJd6pSjnJ8HG07I0yY9Gsoqo/uu3KdR+SAc8s1lX7gfw5/n73IzMgG3UpVpenIeNhl6zo7Ni15p9uNETo//mszoJC5+so5GK0ZRfXIPkq7c5+91BwAI7liP0j2aYdDq0WdmcXzoEhq/rmBKu1AGjRyDZOtIt67dqVCjDj99MRd0WnrUCSHE25XGIX70/HovQgi6hpamnK98E6u1Ok7ci+HD9rUAuLL/PFVb1mbGwS/JUmfxQ772Gr5mCj9NXklyTCJ9Zr9LwuNYJvwxWz7HHSfZ/uVG/MsF0e+zkRgMBgxxT1D6l8JhzCJ05/YjxTxCVV8WytGd2o2yWkNs6rdFMuhBm4VmfZ6Cm13PMShCqiIcXXCYtAKvGat4fP8Jm4+vJ1OdyfRxc3Jtv/xxITPHzyMuOp7Zyz7G3csdIQS3rt5m9iQ56qdVxzA69QhHp9VhH+DH1KFvW0QD4Vl6C8XRZsBgQPPHKhzenQ5Ckadb0EjuDHXHC5UiwfDgFvpLx3ActwjJoEccvcOK6SsZ/PG7rDnyLRp1Jp+Nz2vfWd/NZFFx9BQe38WmaWdsGoaju3gIKe4xqtqyUI7u3H6UlethU7sVksEAuiw0fywr1N+Jfado0KoBPx75Dk2mhvnv5UVmzf1+Np81yIGjAAAgAElEQVRO/Jz4p2hjADQNb8qZg2dp1aWl+YW9YuAf5D7aAvQD5mX/NenQsrVnVgPXJUkyH8plBv+4noJJBYSYDqQBzoC9JElT8uXVQJ5GGgPMBBrndAJCiC3ARkmSvjNxmo2Mz9+12MmN/tJyC4NLFhU9cuZZ2DLcctxHlqa5GP9x4XHsxcXCNy33O232reX4co4fNA2BfV5YkvtIM898uOjz4PX1WRbzBfD7UJ9nGxURnb6y3LXc/2j3C289m1r6jSL/UOdG/Pzc5WWH9f8KlAQeAD0kSUrInlH5RpKkDkKIpsBh4DJ5a9vvS5K0zazTbPzrIwVJkqY/Je8SkBNCtbtAXuf/YbWssMIKK4oNC4SaFgmSJMUDrc2kPwE6ZP9/hEK07J+Gf71TsMIKK6z4r8ByOnD/HqydghVWWGGFhfBPjRT+l/hPdwppf5ny2TwvkiXTjW/Pi6zfdz/bqIiIsgl4tlER8WTBOYv5AkiVirZTtyhI3m+5NZ1X7EwjvZ4XltRCtqQGgt2URc82KiKabvjIYr4AtFcePtuoiMh8yZ7BL1l1ngv/6U7BCiussOKfhJUQzworrLDCilxYUqHx38L/qU7Btl59nEeMAoWCzG1/kfHLz8b5jZvgPGCgHB+t15O2fCnaK8YhnwOmv0vtlnXQqDUsm/AF9678bVLOsAUjCaleDiEEkfeesGz8F2RmZOLo4sioxeNwruAFCiWabb+iPbwTVfV62PcdIVMcH9iG5s9fzNZfWaYiTtOXkLH0E3SnDxnltZjRl9ItQ9GpNewav4rYKxEmx9fo14ZaA8NxL+3HyppDyUyUSeJC2tSm0YTuuAgtwsEOYWsLWh0pG7eTtPpXIx/OHVviPrAnAFJGJrGzlpB1U24Dn1nv4dS8AfqEJB52HQJA3+kDqdmyNhq1hlUTlnLfTHsNWjCcMtXLgYCoe5GsGr8ETUYmlRpWZdzXU4h9GIOvmx3C2QkpLY2MrX+R9oPx5lOHtq/g/Ja841hSq0lauBjdnbsoS5bAc+bHeW0YFEDTzzbiWcKXSi1D0aqz/h97Zx0fxdH4//ecxYUIMZwgLRSCBYcGd2uhpYJ78SIF6riUUqRoi7R96gKlaHF3twLFI0SIkFwuJ/P7Y48kl9yFBPL0x9NvPrzy4nZ3dm52dm5nduT94YdxS7l3IXd+9VzwFiVeKIfZZObOmev8PHkVFlPWUGKJauVwm/0xGTt/QVutgXL/jv6JcZf9NUKqEqG4jJhF+tefYD53CABtow5WRDWYjmzDcv9uoeCuhYcv5pRYHHVoFBTDDdD6w16ERlTHqM9gw7jlRNspY7V7t6Ruvzb4lAlkXthg9NYy5uThQpcFw/AK9sXD3xmh1SDT08nY9QeGDbb3UlOrIS49+oJFIi1m9OsWY75yXomn7cvomrUHKTHf+Rvdkdm8NWUIDZrVJV2fztQxs/nr/NXc1/vpRGrUq87DFGUpwrQxs7h64Tqly5dkyqcTqVS1AiigzXwgaB3r3/Cm8NgVzUIIsxDitBDivBDiRyFEiHX7tBAiWghxL9u2Lkf434UQ3jniOyOE+Nb6uW+2czOEEOesn2cJIfoIIRZnO2+QEOKy9e+odQ5uAa5UhcfI0SROmkBCv944NWuOunRpmyDGkydJGNiPB4MHkDxvNh5vj7c5XiOiFkFlgxjRdAjLJy1h4LShdr9qzcdfML7taMa1GUVcZCxtercHoHWvdty9eoeHUwaROmMszq8NAY0O594jSZ07iYcT+6Gt3wxVcOnckQoVzq8OxHTueK5DZSKq410mkLVN3mbHO1/QbHofu+mKOv4Xv7w2k+Q7sTb77xy4wDetJ3O3x3BUTk5Io4nbnQbi3i4CbTnbtQvGezFE9hnP3W5DebDsG/w/GJV5LOW3bUQOyVqBXz2iJgFlgxjX9C2+nLSMvtPs46m//ng1U9qOZUqbscRHxtKyd9vMY1eOXeK9DuNBSOIGDOX+a31wadEcTRnbPDJFRhH31mhiew0gZfVXeE9UfBPMt+8Q22eg8tdvMDLdgD45Fb+ygcx5cQw/T15J1+n97abr1G8HmNv8bea3noDWWUf4qxGZx4RK0O6d1zBfOY22bgv0X0wlbd5INGGN7MP4hApd+16Yr5zO3KUKKIWmbkv0C8ej/3QM6ufq4PTyW+hXfUTa3OFoajRGBNgZ/8gDd61f8Db6eQo6Wjg5HtPp0q4ly+ZPc3g8p0IjquNTNpAlTd/mj0lf0G5aX7vh7h7/i69fn0lijjJWu1dL4q7eY2X7KYAErY6UiQPQNWiOKiTHvTx/gpSJA0iZNJC05XNwHaj8DkUxP3RtupEyeTApE/qBSs2QdwZQsmwI3Ru9wayJnzBhpuP1GYunLaN3q4H0bjWQqxeUNTTJiSl8+t4i/rP8B4fnFURmZL7/nlXlB3Oht2KtqwIZwCuOsNdSyowc4ROAtx5FJIR4zvqdTYQQblLK1dniigQirNs2GFghRAdgMNBISlkZhZL6HyGEPS6IXWkqP4fp3j0sUVFgMmHYtROnBrb1ikzP4ucIZ5dcjaw6LcPZ87PCMLp66i/cPN3wtoMP1mdHZzvpMtENUkpc3K14A2cXZGoK6rKhWGLuIWOjwGzCeHgX2loNcsWpa9UF47F9yOTcmIhyrWpx6WeF7x996jpOnm642sFox164Rcrd3IwfoxWj7fRCJUz348FkApOJh5t349asvk1Yw+mLWJKV1l/62ctosjF80k+cx5KUhZao2TKc/T/vBuD6qb9w9XTDy05+pefKL9vj5cNCMd2NxByp3Dv9nztxbmwLGTSev4BMUdKVceEi6uK52UJOtWtivhdJ6ZoVOPnLPgBun7qGi4crHnaQ3pd3Zz3A75y5hlc2wmvDPm04t/kIIJEpidkQ1fvtI6obtsN87pBiLmOVCCiB5dYVMGYoK+cTosGYUSi4a4TIggfaUUEw3AAVW9bi7M9Knt07dQ1nT1fc7ZSx6Au3SLJTxpCgc3cmOKw8Mi4GmZIMRgMZh3airW17LzFksY+EkzPZf4hCrUbonEClQuicKFWuFJt/2gbAhZOXcPdyw9cOOtuRHsQncunMFUxWDMnT6h9EZ//XVFD20T4gtADhD2GLan0N+ArYBhRk8dlEYLyUMg7AioNdS7YK53FS+/lhic3Cg1hiY1H55X5w6Bo2xmf1OrynzyJ53mybYz6BvsRnwwfHR8fhE2AfnT1s7khWHl9LcGgJNq9RnKW2rN1ESGhJPBb9gMeMVaR/tQTh7YdMyGpVWRJiEcVs0yWK+aGt3YiMHb/b/S73wGI8jMpayv8wOgH3wNwP37xUvnVtAua/i65yOe6/p6yIN8XEobHzcH0kj25tSNt/zOHxYoE+JGTLr4ToeHwC7P9gB84dzuLjXxIUGsL2NX9k7g+tWYlhC8eiKVMaTdkyAJhjY1H7O06Xa4d2pB86mmu/S4tmpG3fgVeAD4nZEOiJ0Qk2D/ycUmnU1OzamCt7FHaWZ0Axqrauw+Fv/gSdEzI1qyKUSXkhqrfa7LdE30ZdrooC7tPqUJerqmA6HsX1FLhrLBakUU9hySPQh+RseZYcnYBHQP7L2LG12/ALDaHnmvGoK1RBv24xSIklPhZVsdz3Ulu7ER7z1uI2YSZpy+cAIB/Ekb7xBzwXf4/n0p+RaamAtMGgx0bF4W8HnQ0weGJ/vtq+ilEfDrPBoBem/kF09n9N+a4UhBAaoC3Kkun8hFejrLjLztF9BcUt6FuymejkQ1WAEzn2Hbfuz6fyh0vOOLCPhL69SHp/Cu59+tnGkA9M7yN9Pn4hg8P7cu/aHRp0bAxAWNMa3Lxwg5QRPXg4ZRAuvUeAzin3yTnidHljGOnfrcxjymL+0+VI17ceJ372MvSHTuEzvPdj43GuUx3Pbq2Jn+/YQrIg6OyV4xczInwAkdfuUbej8gZ38/zfjGkwmO9mrMV08xY+s6Y+Nh5dzTBcO7Yj+fMVtgc0GpwaNSB95x676Oy8cC9dp/bj76OXuXlMob12er8Xm2b9B2lxcE5ORHWn/hg2rct1/+T9u2Ts+gWXgR/gMuB95IP7ufP7CXHXCBXCyRbp/TSyX/TzX8bKN61G9IVb/PHOFxiP7cOlz0hweUQGzh2P8fh+Usb1JvWT93DurvwOhZs72toNSB7Zk+RhLyOcnPEPyo3MsJespTNX8mqT3vRrPxRPb0/eHFaQx0/+JQvw71lVfgaaXYQQj96j96EAlvITvgzKg3w7gBCiDhArpbwlhLgLfCmEKJbTQq4AEtgpTdlxtHMrVaBXiDKP3xwXi8o/C5es8vfHEm/nNdcq47mzqINDcHmlJ87NmjPXoOba2Wv4ZsMH+wb6OTTtALBYLBz8fT+dBndl9487iOjenF8//5nGLmC5H4klNlp5HfbJKtgqH39koi3AS122Iq5vvatcn4cXmurhGKvWQlO+Mq891BJz9m/cg7JalO6BPjyMyd3N9DiZYuIQGjXakkGovD3RBPhhis0NE9NVLEvxj0cTNeRdm+4iAPeOzdGUCqbET59z8NTf+GTLL59AXx7cd3y7pcXCkd/3025wF/b9uDOzWykh2poGjQaVlydqf38scbnTpSlfDu9J44gf+w4y2ZYQ7DV2JEKrxffTOdw6cRvvbAh070Afkh0gvVuMegk3Xw9+GZwFHCxRrRyvLVL67dXFPUGlQl0lHPOFo4q5TS5EdXmcX1fGOISbB+rKtTBYzJgvHMV0bAemY4qjmVOP4U+NuyZVuW5LRipC44Q0PORJpXL2ROXswcBNM4g8+zee2fLMM9CHh3aovI5UvXsTDnz+OxazGeHqjiU2CnVwKVS+/lgeOAbWmS+fRRUQjPDwRPN8DSz3o9HWi8CpWXtw90CboLfBoPsH+REXk/t3HW/9nRozjGz8fjOvD8lp1VI4epbfAPKrgowphEkpR1jHDR4bHigN6Mjq4ukJVLZisa8DnijWm/nRRaBWjn01rfttlB1H+6hCADBdvowmpASqwECl1RjRDMPBAzbnqoOzero0FSqAVoP++295MHgA49uN4di2wzR9SRlsrFCjImkpqSTaecgFZkNn12pRh3vXFS/huHuxvNBQIX4Lz2KoAktiOn0YdWAIwj8Q1Bq09SIwnjxoE1/K2DdIGfs6KWNfx3hsL/o1C0lf/SkP3x3Mf9pO4frWEzz3ktK6DqxRHkNKGmkF+MF6lVYw2obzV9CFlkE46bA8TMO97Yuk7jpsE1YT6E/ggveJmTQX4617ueJ6+PsOTLcjufvyME5sO0qjl14EoHyNiqSlpJFkJ7+yo8ZrtKhDlBU1/sjq9O8z19CWKwsaNZbUNFxaNCN9v20eqQOK4zPzYx58NBPzHVvvZgCVuxtJCxYR22cgF7Ydp2Y35e2tVI1Q9ClppNhBeoe/EkHFJtX4z4hFNq3iWY1HMavRSGY1Gonp7EGkPhVL5E0roroR5ou2XWppM4eQNnMwaTMHYzp3yIqoVrq3HmGihbcf6tKVEFqnp8Jdo9Up16t1AbMx1zUVRJb0ZEyJ91jZbjJXth2n2ktKnoXUCCU9RV+gSiHpXjxlG1Yh8szfqINLog4pjSX+Prr6zTCesL2XqoAsMKC6TAWERoNMScYSdx9NhefJ2LOZlEkDMV88zanDZ2n7cisAqtR8jtTk1MwKILuyjzM0bdOI61YMemHr/8qbwhNJSpkkhBgJrBdCLAe6A9WklPcAhBARwLvA4x3LYQ4wWwjRRkoZL4QIA/oAdfOdIIuZlEUL8J49D6FSod+8CfOtmzh3UIY20jduwKlJE5xbtkaaTJCRQfLUj2yiOLnzBDUiarNo7zIy9AaWjFuUeWzSmvdYNmEJibEPeGv+aFzdXUAIbl26ycopSwH4aeEPvPXJSNxfXglCkP79SmRyIvp1i3AbP1uZhrh3M5Z7t9A16wBAxs6Nj720mztPUyaiOr33fYJJn8H2cVldJ53XjOPPiatIjUmket9W1BrSATd/L17fNpObO8+wY+IqQtvV4bmXGuFuMWB5mIbK1ZlSv68k+ddtGK/fwrOHMnsq+Yc/KDb0dVReHvi/OxwAaTZz75URABSf8w4udaqh9vai9J9f4z3/B2JvxzBv7+dk6A2sHJc5mYxxa6awasLnJMUmMnj+SFysqPHbl26yespyAOq0q0/zN1pjMVmwpKYhXJwp/u0a0jZuxnTjJq5dOgKQ9tvvuPfthcrTE+9xozPTFdd/CADCyQmnOrVInK2MlVzedYrKEWFM3LOADL2BH8cvz0xXv9UT+GniSpLvP6Dr9P4k3otj+K8fA3B+yzH+XJhzuqnEePRPXAZ+YJ2SakVU11OQ1qbDW8lLzr0mINw8kGYThl+Wg0ZbKLhrUB7qjlQgDDdwbedpQiPCeGvvfEzWKamP9Oqa8WycsJKH9xOp06c1DYZ0wN3fi8FbZ3Ft12k2TlzFvoW/0umTIQzaNAOJ8prv/uFCMnZvxnL3JroWyr3M+PN3tOFN0DVpDSYTMsNA6kIl/83XL2E8sgePGSsUf+ebV1nwwWJGfTCMHw98jUFvYNrYrHHAT9bNZOb4ecTFxPPh4ikU8/EGIbh64Rpz3lHKgo9/MVZvXo6buysoz6PRKBDOx5rR2JPp/zN1ujD0WHS2EOKhlNJu5+Qj7LWUcp6j8EKI31EQr29JKetl268G7gI1pZRR1jeI2o8Gk4UQfazbw63bQ1FumARSUAypbSfr59D95k0L7Q69da3wMBermjz5K31OrdlTeJiLDp6xjw9UAH2YUniYi9khhYe5WBCZ70lrj9X73dMfHyi/ekYxF7NqFS7mYkSDyEKLq22eT4CC6dC9XU+Nzn6jdLd8P3O+vvXLU3/ff0OPfVNwVCFYj334uPBSyo7Wj1/l2G8GgrJtl8lxfA2wJtv2UmDp49JbpCIVqUj/v/QsTzXNr541O84iFalIRfqf1T81piCE8BFCbBdCXLX+73B+sBBCLYQ4JYR4fF80RZVCkYpUpCIVmv7BdQrvADuklBWAHdZtRxoFXMpvxP9q9tGwa16PD5RPTdU93UyO7Bq617PQ4upvKLx03Yz1Zplz4fWRT8pjRW1BNSuy+OMD5VNTyhSehWO375wLLS5RcJMshypM3PU7J6Y+PlAB1KvW2EKLa2NY4Y01FYbM/9yk1M7Ai9bPa4HdKIt8bSSEKAG0B6YD+cr4f3WlUKSCqTArhCIV6f+i/sF1CgFSyigA60QdR62mBcAEIN9Mk6JKoUhFKlKRCkkFWeWdfaGtVSuklCuyHf8TsDdVboqdffbi7wDcl1KeEEK8mN90FVUKRSpSkYpUSCrI7CNrBbAij+MtHB0TQsQIIYKsbwlBwH07wRoCnYQQ7QBnwFMI8bWU8o280vV/olLo9+FAakTUJkNvYPG4BQ48EEZQ3uqBEHnjXqYHgpunG8PmjqRsmUCETqN4DZjNJP6wlfgVP9rEoStXgqBZY3CuEkrs/LUkfJG10MmnTxe8e7RGSsnwS3dYPn4RPSf1IiyiFhl6A8vGLeKmnXQNnPMW5V4on+nNsMzqNVCtaQ0GzhpKMV9vjEmppF2L5GRX28V2Faf3wbd5Dcx6A5dGLiXlXLZVnCpB+LaZGKITOPOGAhwr/VwZBs0YSlCZYLTOOu7fiWHxWEf5lbdnhF+wP0EebqictJjT0on/djsxn9t6AziVD6H0JyNxrVqeyLlfc3/5bwAIJy0Vf5qB0GkRajWJmw7CZ7/y0gd9eD6iBhl6A9+MW8rdC7lXpfZaMIKSVg+E22eu8d3klVhMZpoN6kjtLsqqbz8fZ1QBAZijotBv3Ejaf2x9NZxbtMC1p8LGkXo9KZ9+ium6glp2eeklXDsoCwv1f/wBs5UJHcM+GkqdZnUw6A3MG/sJ185fy5W2Rxr28VBa92hF58pdbe9X9YosWD+fE3tOUqJcCOl6A5+M/YRr56/nGVerHi3pUrmbzf6gauXo99tHXN97Ft+ygU/lgaDxDgEEZn2iXWzGk3gz9P5wQGbZXzpuod2yP2jOcJuyv/TthRjS0ukwuAsNOzcFwNvPGVXxQCwxUaRv+Z30H23vpbZeQ1zf6K+sATGbSV2xGNPFc6DV4TV7IWi1oFaTcWBPvtL9OP2D3UcbgN7ALOv/63MGkFJOAiYBWN8Uxj2uQoD/sdlH2bwazgghTgohcjOmc0jxQAhmRNPBLJu0hEEOPRBWMa7tKN5uM9LGA6Hb8O7cvHiDG51HoHJ2xhQTz/W2Q/Ds0BRdqC3r3pyYQszUZSSssn34aQJ8KdarEze6juJG+2Go1CpeGf86gWWDGdt0GKsmLaXftMF20/X1x18yqe1Y3mkzhvjIOFr1bodQqeg3fTAZBiOHGo8lIzaJ67NsjXl8m4fhUjaQQ/VGcXncSirNsfUMKDmwHalXbTEVQ2YP5+jWw1w7e5UvP1jBtTNXn9gzYmL7sYBEOGu53Ho0xTo3xrlCzvx6yN0PVnJ/xW82+6XByNVX3uNy69FcajMazxdrEtG/Pf5lA5n64ii+n7ySHg48EI7/to/pzccwq/U4tM46GrzaDICdK35nTruJzO3wDmi1GC9cIL5XL5ybNcvlq2GOiuLBqFEk9O9P6rp1eL6tcIvUZcvi2qED8UOGED9gALr69QkuE0ydiDqElA2mb+N+LJj4GSNnDLebNoAK1Srg7pl76Y9KpaL/pL5cO38dn+I+9G3cn88mLmTEY+Jy88y9QFClUtF80qtEnb+BR3Hvp/ZAMCXew5QUidrNPhG4oN4MYRG1CCwbxJimQ1k56XP6TxtiN9xXH3/BO23HMLHNaOIiY2ndux0AG5f/xqR2Y5jc4W2EVofp8gUSB7+JU5PmqEvm8Eg5fZKk4f1IGjGAhwtm4z7S6pFizCBp8hiSRvQnaUR/tLXCAerxlPoHMRezgJZCiKtAS+s2QohgIcSmp4n4f6pSIIvDVB2lBpz5uBPqtKzL7kwPhCu45ssDwSkTtViiQknOHTiDS7WKGK7fRuNfDLWnO8l/7MWjua3XgDkhifRzV5Gm3LNuhEaNcNaBWoXOxYmg8iHss6brmtVrID/eDEhJaFgFMtIzOLzxAOm37hPz20G86z5nc55/mzpE/6gs90w+cRWNpxs6K//eKcgHv5Y1iPxmp805weVCCCgVyJ6fd3F23xkq1qj0xJ4RoWEVyIiMw5SQgkVv4MGGfXi1svUGMMUnkXbmGtIOy96Slp6Vbxo15cIrc/QX5XpunrqKi4cbnnY8EC5m80C4lcMDAaB0mEJ+T9+8GUwm0nfuxKlhDm+GCxeQD5UWsfHiRVT+CrBQU6oUxosXwWAAsxnj6dM0bNOABq3qs/1nBWp3+dRl3Dzd8bHD9FepVAycMoBVM3IzJTv37cT+zQdwdXfl7OGzOeLKnf9KXP35wkFclzcfw9ndlVuHlZmIT+OBAIBQOVxxXVBvhlotw9ln9dkoSNnP2V8fGlYBAMN25V4a9u5EWy+H91YOjxRp75hGg1BrwJFNXQFklpZ8/z2NpJTxUsrmUsoK1v8TrPsjpZTt7ITfLaXskJ+4/9cqhezyBB47H8030Jf4yKwWUEJ0PL55eCCsOr6OkNAQNlk9EG5dvEndtvXRBPoiDRlog4ujDfTDGB2HxkE8OWWKiSf+i1+osGctFQ5+gz4lFSkhIRufPiE6nmIOvAYGzx3O0uOrCQoNYeuaPygW6IO0WHDzcqfmL+8T8mZzijWypYg7BRUj/V5W/IaoeJyClPgrTu3NtY+/yYV+vvPXbcpWLU98ZBz12zfAN8jviT0jJq15D7ealbj7wUqQEmNUPNrA/OUXACoVlbd8SrXT60jedxq1Rp3DAyH+sR4Idbo24ZLVA+GRfEsWR+XhQfpepYKxxMai9s+NX34kl/btyTiqQOlMN26grVYN4ekJTk7o6tXDP9gf30BfYrOVsbioWHztXGunPh05vP1wLrKub6AvDds04I+vNuHs4kRyQhZ2Jy4qDl87/gCd+nTk0PbDJOQADPoG+tKgTQNOfP0nWhcdaQ+yunue1ANB41MKTbESmB86pgoXRD6BPja+JHn5bAyeO4Jlx9cQHFqCrdl8NgD8SxZHuHtkdv1Y4mJR+9rxSKnfGO9l6/D4cBapC7J5pKhUeC1ahc83v2E8fRzgyNNe2/8pP4VnRC7W7qPLKCC9x0+gLgAH/vPxCxkU3oe71+7S0OqB8OvSn3DzdKf4xP44hZYm/eJ1pNn8KKJ8JVrl6Y5H83pca9aXqw3fwMnFGR97D0gH8S0fv5hh4f2JvHaX+h0bIRAIoaJs1XKcfmM2t5ZswDOsPC7lsnOQ7Hss+LasSUZcMilnc/fHfz5+IcVLFGfInOE4u7lgMhrzTFdenhHL3/mcpK2HKTl1MKpHbnMFgYVZLFxuM4bz4f1xC6uIs7tr7jB5xNdjan+uH73E38cu2+wvVa08lgcPkCnZkN8O4tGGheHSrh0pyxX4m/n2bVK//ZZi8+ZRbM4cTNevKyjofPhs+AT40KR9E35bnavrl6EfDGHVjC+xWCz5Kq8+AT40bt+Y9as35Ao75IPBfDHjS6XCLyQPBFPCbUwP7qJ297NvrFBA2ffZsB92+fhFDA3vl1n2s6tctVAsiQ+QD7OZHNmJI+PQPhKH9CJl6hRc3szmkWKxkDRiAA96d0dT8TmAqgW/mhzX8S+gpP6vVQqPuo8qA22AdSJHCRNCDJo0adKty5cvp03fOIcHMQn4Bme1BH0CffPhgbCPem2V4Qr9Qz2fj19I5Jg5ZNyJQu3jhfFuNNpAP0x5xJNdbg3CMN6NxrNtE8r+soAyVcuh0Wnwycanz4/XwKHfD1CnbX0SouNRa9Sc3XMKS5oBjacb+hvReFTJ6k81RCXgHJIVv1OQL4boB3iHV8KvdS0aHFtE1eWjKNawKrW3TCd8x2zGLBrH0W1H+HHBdxzYsI+YW9H59oyo11bpSovo3h1RHFgAACAASURBVJwjWw4pafRwI+NODM6hJdAG+WKMyV9+PZJf73ZU+GEazqEl0Og0OTwQfEly4IHQZtTLuPt68uvUdbmOlahSFsvDrNazyt8fc1zuFrCmXDk8x48nccoUG2+G9E2bSBg0iPRdu3Bq1IjG7RsTHxOPf7Yy5hfkT3yOaw2tEkpwmSDW7FvNuoNrcXJxYvW+LwEIa1CdT36ay8brGyjmV4zuQ16mfuv61rj8SIiJzxFXeYLLBLF635esPbjGGtcXmXHN+2kOk6+uxc3Pi/qD2lOplUKdfxIPhMtbrBhwiwlpNiHUunyfn10qZ0803iFovEOsv8mcPhuOy4ZS9vcT3ta2u7Zs1fLI1Gz30i9vjxTThbMKpt7TdlGrTH2I8ewpUJ4pT6X/i3acz4yklIcAP8A/x/4VM2fOLF25cmXXKR0mcHTbEV7M9ECoRFpKmgMPhKxWdu0W4ZkeCK6ebmi0GvTn/sK5SijpF65hMRjxbN+ElB2Hc8VjT8aoWFzCKpP483ZudBrBxUPnuXzkAo2t6QqtURG9g3QFZPMaqNmiNpHX73L9zFV0zjqqNq6OyllLYLeGaDxdbQaOY7ceJ7B7EwA8a1XAlJJGxv1Erk//lgM1hnGwzgjOD/6MBwfOc7zNFI42n8jUNz/M9Ix4aUQPzuw7/cSeEdfOXMWpfAhOFUuScS+WYp0ak7Q9t0WmPWl8PFF7uhG3dhNXukzEcDOSS3tOE95NuZ4yNSqQnpJGsh0PhPqvNOO5JtVYO+KzXK1iZw8XgiuXQri6ZvpqODdrhuFgDp5/8eJ4TZ1K8owZmO/aejMIb6VP3nDwIPLhQwa3HMrBrYdo+VJzACrXqExqSmquivTozqO8Wus1ejXoTa8GvTHoDfRtrLRaX67eg/blO9KhfCfOHj5H1O1oDm09ROUalUlLSc3VRXR05zF61nqd3g360LtBH2tcysB79+qv0KF8J2ZU6M2tw5dJvHOfK9tOPJUHgnLhaoRai3xCj4ZH3gymxHsc33aExlafjdA8fElsy34dIq9nlW8XD1dKVS6NcHFFFWD1SGnSDOMRW48UVVCWR4q6vNWbITkJ4emFcLMO+Ot0aMNqA9i+Vj6BpJT5/ntW9T87JVUIURlQA45tm4CTO49TM6IWi/cux6A38Pm4hZnHJq95n6UTFpMY+4Dh80dnMv1vXbrBCqsHQonQEoyYPwYfi5mMm/dwrlyW8luWk/jTNjKu3ca7pzKmk/jtJtR+xSj762eo3F3BYsGnTxf+bjuY9DNXSN6yn7K/LVQ4/+dvsu6jL3jjvX58uncpBr2B5dm8GSaseZcVE5aQFJvIkPkjcXF3tXoN3ODLKcuxmC18MXkpQz4ZSYWrazAmPeTWwvV4h1fCO7wS99b9Sfyfp/BrXoP6Rz7Dos/g4qjHA2YbdWpM617t8PJVWlLxUXFP7Bkxd9OngERIqPTrLOK/30H6X3fwe0NpjMV9vQWNvzeV//gEtbsr0mKheP+OXGw2HG3xYpT+dDRCrQKV4MHvB9i8eD3dP+7H+3s+I0OfwTfjs65n8Op3+HbicpLvP6DH9AE8uBfLmF+V2TBntxxly0JlNli11uFc3neWcvvXU2zuXFCpSN+8GfPNm7h0Unw19Bs24N67NypPTzzGjFG+wGwmYbAyO8z7449ReXoiTSZSFizgYdJDju48SnizOqzZ/6UyJfXt+Zlpm7b2Y+ZPWEBCPt+S4qLjMJvNrN7/JQZ9Op+8nYXAnrr2Yz4tQFwp0QlYLOan9kDQeJdQsiEtwe5gc0G9GU7tPEFYRC0W7F1mLftZv8kJa95j5YTFJMYmMnT+KGvZh1uXbvLllKzprnVa1+Ps3tNUPfE7nlPngUqFYfsmzLdv4tRWuZeGzRvQNWyCU7PWYDYhDRmkzFambat8fHEfOxlUKhCCjP270Vatli9gXF56lt8A8qvH+ik8SxJCmMnyiBbAZCnlH47Cv1y6U6Fd3FRd7hkyTxxXhh1f5idU//Qne523p8LGXEwqxNG0NerCYwxNKRNTaHG9ef0ZZR+pHA/CF1TPMvtocdXCYx/5/rHnqW9Ak5Dm+X7m7L2343/TT+FZkpRS/f87DUUqUpGK5Ej/O01sx/qfqhSKVKQiFelZ1r+h+6ioUihSkYpUpEJSUaXwjGt158Lr1H7tt8KbqPX9+MLzVf5l5hP5i9vV2jGF50MNUHVa/mYb5UfnP6j/+ED5VMtZhedFvfUNO+snnlDCDv7iSWU8f6fQ4irMMQCAdSfmPz5QPuVR4sVCi6swRtT+l8ZoHelfXSkUqUhFKtI/qX/QZOe/pqJKoUhFKlKRCklFbwrPuNTP1cS52yBQqTAe2kbGnz/ZDacqVQHXsfNIXzMH02nr4hcXN5x7jkQVVAokVLr9GVdOXmbQR4OoFVEbg97AZ28v4HoeWONBHw2mRY8W9HiuOwAlypdg1LzRuISVx3jod0yn/gTgwK145u77C4uUdHk+mH61yuSK6/jdB8zd/xcmi8TbWcsX3WqhbdKdzh2ex6Q3cGjMChLO3cx1nltJfxovfQudtzsJ529ycMRSLEYzAfWfo+nqMTy0kjHvbDoGbEdVugq6pj2U+dsaHfL+bQwblmTlVYmKOHUchkxWVo6arp3CdESZFawJa4amaiMQAtP5/cBR3p8xgRdbNCRdn874ER9w4az99UFvT36Ldp1bYjab+Wb1T6xd+S3lQsswZ9FHVKlWGXFs41PnV14a/fFw6jerS7o+nelj5vDX+au5wkz5dAJh9aqTmpIKwPQxs4F41BVr4NSpHwgVxmN/Ytz9q93vUJUIxeWtmaT/Zz7mc4cA0DZsjya8JQgwndmHjI9E1+oNECpMp/dgPGQ7dV5VqjLO3UdjSVLum/nycYz7s6EzhMC538foIiMxbPsVl17DQaUmY9cfGDZ8axOXplZDXHr0BYtEWszo1y3GfOU8AE5tX0bXrD1IyYiTd1g2fhGvTepdKLhrjXcIqLWYEm7ZXfdQUBT3J598RJs2EaSl6Rk48G1Onz6fK8yOHT/h7q4QZf39/Th+/DQ9egzMPF6rVjUAM/AKYP9BkQ8VjSnYkRDioZTSPce+SsBywBtwAvYBPwOP6FShwD1AD5yVUvYSQnQFfgGek1JeFkIcsZ7rA7hYwwN0kVLetJMUtXP3oaQteReZGI/ruE8xnT+CJTpHX6tQ4dSpD+ZLp2x2O3cbhPnSCdK/nAlqDXevOVErojbBZYIZ3GQQlWpUYuj0YYzr/LbdfAitFoq7ly3WOCUxhRUfLGf2B1kLe8wWyaw9V1jauQYB7k68/sMxmpb1o7xPVhamGIzM2HOZJZ1qEOThTEJaBqrSVVB5F2d9/bfxq1me8Jl92NLhw1zpqDnlVS6t3MKt9YcJn9WX8j1f5Oo6heh5/8gVdvf+JDNshYnu6CJ6YvhlAerQGmjD2yG1uddUWO5dtakoAIRvMJqqjUj/biaYzTh1Hckrb3SlTLlSNAvvTFitF5g6dzLdWvfKFd/LPTsRFBJIi3pdkVLi66dA25ISk/h48mxato1gYLjPU+VXXqrfrC4lyobwSqM3qVLzOcbNHM2gjm/ZDbtk2nJ2/7E3Wwb74NRlIPpVHyGT4nEZPgfTxWPI+7YroREqdG3fxPxXFsVVFVAKTXhL9IsngNmEy6CPEHXbkP71DGRyAs79PsJ09SQyLtImKvOdvzD8YL9fXlOndWZ4l76jSJ0xHkt8LB7Tl2E8cRDLvVuZYU3nT5ByQmkEqUqVw23kB6SM640o5oeuTTdSxvUBYwaq16fxyvg3MnHXoTUq0n/aEN7rMiHX93/18ReZdNM33utL697t2LD0FzYu/42NVr+Mr84tQ+Xs5ZC62qVdS157qROTp86zezy7WreOIDS0DFWqNCE8vAYLF06nSZPOucI1b/5y5udvv13Gxo3bM7dVKhXTp08C2PrYL3yM/g1vCv8U5mIh8KmVW/QcsEhKudW6HQYcB163bj96avQE9gOvAkgp61rDvg98/+hcBxUCQLglNgoZHwNmE6aTe9G8kBuXrm3aAdOZg8iH2Zb/O7ugDq2C8dA2ZdtsIjU5lXqt6rLzZwU3feXUFdw83SjmAGvcd3I/Vs9YbbM/KT6Jq2evQjZD+/MxyZT0cqGElwtatYrWFQLY/bctv2XzXzE0L1+cIA9loZSPqw51uWqYLilQx7iT19F5ueFiB4sc0Oh5bm9UBnz//nEfJds4bjGrAssik+6DxYS6TFVMV08g3Dwdhrc51ycQS/QNMBlBWjDf/Yseb3bl1x+Ulu7pE+fw9PLAPyA3xfL1vt1ZNG9F5g8qPu5B5v9nT13EZMpaOPik+ZWXGrVuwJaflIfEhZOX8PByx9cO+trudZcMxRIfhUywlrMz+9E8H54rnLZhO8znDyEfJmXuE8VDsNz+C4wZYLFgSbwPpgxkYixYzJgvHkZTsWa+0gEgPIqhCa2O8fRuhJs7luhILPejwGwi49BOtLVtEeEYsoZWhZMz2WfZC7UaoXMClQqdi47g8iGFgrsGUOncsdgx63mkgqC4O3ZsxTffKCvWjx49hbe3J4GBjuyKwd3djRdfbMiGDVnP/2HD+vLrr5vBvntZgVTEPsq/goDMppOU8lweYRFCuKNYyfXHWik8gUIsiVmzTCyJcQgvWzKp8PJFU60+xv2bbfarfAORD5Nxfn00rhM+w6nnCJxcnPAN9CUuKusBFB8dbxeR3L5PB45uP5In4O6R7qemE+CRtSo2wN2J2FSDTZhbiWkkG4wM+OUEr31/lN8vR6Fy80Y+zIo/NTIBl0DbH6mTjzvGpDSkWWmRpUUl4JotjH+tUNpvn07E1+PxqhiCcPNGpjxA27QHGft/RupTQK3NlWZVUDmcX38Xpy4jED7KTCpLXCSqkArg7AYaLeqyL+Dn70PUvejM86IjYwgMyv2DLVWmBO27tGL9n9/w5XeLKVOuVKHnV17yD/TjfmTW8+B+VCz+dnDVAIMn9mft9pWM/HAYWp0W4eWLTMwircikeISXbYUiPH3QVKmL8fA2m/2WmNuoyz4Pru6g1aEqVRksWa1nmZyA8Mj94FWHhOI8YBpOr76N8Mti++havk7Gzu8V5KhWhyU+65os8bGoiuW+Jm3tRnjMW4vbhJmkLVcc+OSDONI3/oDn4u/xXPozaSlpSCkLBXetc9YhdC7IjFS75xZUwcGB3L2bdX/v3YsmONierbGizp3bsGvXAVJSHlrPD6Bz59asXPl1oaSniJKaf30K7BRCbBZCjBFCPG7uYxdgi5TyLyBBCJH/5lKWHsvndeo2EMOGNblfY1VqVCXKk7F/E2lzRoHBwMvDujuIMjfWuFH7hvy+5vcnSLJ9mS2SS/dTWNQxjCWdwlh57AZ6k51X71ytMsdZkHDuJr+Gj+aPllO48uU2mn45RgnuUQyZloK8f9tuWiz3b6P/cjLp30zDeHoXTh0VZzb5IBrj8a04dxuNU5dRWGLv2F3eaa/lqNPpMBgy6Nzidb7/6hdmf/ZBXtnxWNnLr1sP0hyGt49yzp3OZTNX0bNJbwa0H4antwdvDHPQXslxqlPHfhg2f5WrnMn798jY8ysuAz7Epd97yKS43GUxR1yW6JukLR5D+qp3MR3bjnP3UQCoQ8OQaSlYom86vE57N8R4fD8p43qT+sl7OHdXAH3CzR1t7QYkj+xJ8rCXHaLenwR3XbNFHaQp3WHXUUFln1qeB1K9Ryd++CFrDGbu3A+ZMmWmgi0vBP1TJjtCCB8hxHYhxFXr/3aNMoQQ3kKIn4QQl4UQl4QQj53b/Y8MNEspVwshtqKgaTsDg4UQ1aWUBgen9AQWWD9/Z90+mZ/vEkIMAgY1b97c7YuZH/GoLaPy9kMm24LE1KVCcemt9IsKd0/Uz9cGsxnzzcvIxDgst/5C27g9miq16VTLm30b9+EXlNXa8g30zQUnK1elHEGlg1mxdyUATi5OLN+7gsFNBtlNb3E3Z2JSsl7jYx4a8Hez7ccv7u6Et7MvHjUjKFalIeu6G4iLukGQe1Y5cAv2QR9jS8A0JKSg9XJFqFVIswXXIB/0Vty0MdtrfuTOM6hm9kFmpKPyLg4+wajLVkU4u4Nag651PzK2KphnMrLSarl5Hpr1VN4O0lMxXziAUGvRvNAITfkaxJy/TlBIVqstMDiAmOjcawSio2LY8rsyiLz1j53MWfSh3bwqaH65aNW4aNXUDPbmr/gUShfLWlPQrXdnOr2uWIheOn2F4sFZbzDFg/yJi8nNWYy3kk+NGUb++H4LPYf0QF5Zj/DOemAKL99c5UxVojzOPZW5/sLNA3XlWhjMZswXj2I6tgPTMWWMx+n1MeCZ1foWnj42b4OATf6br58FlRpc3FGVqIC6Qg1cylcDjRahc0FVzJdHd1nl64/lgWN2pPnyWVQBwQgPTzTP18ByPxptvQicmrWnrNaL9LT0J8JddxjchT0/Zjn8NejYOM+uo/xI5eyJylnpXoqKOkKJElnrfkJCAomKss+28vHxpnbtMHr0yPot1qr1Al99tfjR5stAO8AE/JY7hsfL8s+NKbwD7JBSzhJCvGPdnmgn3GcoDeyXhRA64LELa/4xdLbVJu5LKWVnlEy3a2ghhPAFmgGrhBA3gfHAKzl9E/L4nhVSytp//vnnCyXLlkf4BIBag6ZmE0znbI2VUj8aQOpH/Un9qD+m0wcw/LgU07nDyJREpbupeAjGfX9gPL6bLd9s5vDWQzR7SfH8rWTFcOfsIjq+8zi9ar/JgIb9GdCwPwa9wWGFAFAlwIPbSWncS9ZjNFvYejWGF8vavua/WNafU1GJpJ/ZzYOvpjHgtR7IG2fRPFcXAL+a5clITkNvB4scc+AipToofdzlujfm7lalbnX2z2LK+4aVQ6gEltvKzCDDj3NJX/M+Mi0ZS+T1rAoBwDVrjEEVUAZQQbq1K8DFA9PZ3Rg2LEEa0li74lu69lAcAMNqvUBK8kNiY3Lz7rdv2k2Dxkoa6zasxY3r9t9SCppfJosFvdHM+ZhkyhazHfT/Ze16+rQaRJ9Wg9i7dT9tXm6pxF/zOR4mp2ZWANmVfZyhSZtG/H35Jpa711D5BiGKFVfKWfVGmC8dszkvbfZQ0mYPIW32EEznDmH4bQXmi8o4j3BT7oPw9kMdXB40OoSXH6jUqJ+vh+kv2wkQj8IDqILLKTaZ+ocYd/+IftFo9EvexvDr55jOn0RmZKDyD1Qq9vrNMJ7IgQgPCM78rC5jxUqnJGOJu4+mwvNk7NlMyqSBXDx0zop6fxF4Otz1c/WqIA2O39ryo+wY7g0btvL66y8BEB5eg6SkFKKj7Q8NdOvWgc2bd2AwZLVFK1duRKVKDalUqSEos46G8YQVAvyj3UedgbXWz2tReldsJITwBJoAXwBIKTOklI9lp/8jbwpCiDYotZpRCBEI+JI1eyinXgbWSSkHZzt/D9AIZdZSfmVK/2kZrsM+VqakHt6OJfo22oZtATAe2JznyYafluHSaxyoNVjio/lhwgJSk1KpHVGbFftWKlNSxy3IDP/Bmg9ZNHFhnlhjb39vPt24AI2vG0iJJiyC9K+nMrFJJYatP4VFQufngyjv686P55UhmO5VS1DOx40GpXzp8e0RVELQ9flgAhKuY0mKo/PBTzDpMzg0ZkXm90R8NY7D41ahj0nk1PTvaLR0OGETupNw/ibXvt0NQKkO4VTs1RxpMmNKN7Jv6BKaNLOQses7nLqOAqHCfPcKKldPNC8oPgamc3vRVKiJplpTsJiRJiMZm1dmfq9Th8EIZzewmMnY9S1/rN9OeINa7Dq2gXR9OhNGfpgZ9stvF/HOmI+5Hx3L0s++ZMHyGfQb8jqpqXreGf0xAH7FfVn/5ze4e7ih1ameKr9CfR2vFj604wj1m9XlhwNfk65PZ8bYOZnH5q2byazx84iLieeDxVPw9vFCCMHVC9eY+86ndO3mjGH9Klz6v6+Us2M7sMTcQVO3lZJnR7Y5+loAnN8cj3D1QJrNGLauQ6g1OPecACqB6cxeZNw9NDUV3w3TyV2on6uDtmYzpMUCpgwMvy5xGLd+zULcJs0BlYqM3Zux3L2JrkVHADL+/B1teBN0TVqDyYTMMJC6UMl38/VLGI/swWPGCrCYEcdusfajVbz5Xr9CwV3XaRBCXioIinvLlp20aRPBxYv7SEvTM2jQuMxjv/22hqFDJ2a+OfTo0ZG5cz/P87ufVv/gm0KAlDIKQEoZJYSwN7peDogFVgshqgMngFFSyjwHdAodnS2EsADZ59DNB0oA7claST5XSvl1tnN2A+OklMetn2dJKbdkOz4SZWrqUCFEH6C2lHL449KSMrJDoV3ca0/cdsit78c7HkgtqAoTc9FtgtvjAxVAzy7m4qm9VDK19Y3CQ4M8q5iLoQe9Hh+oAHpmMRfpt58aZV3Bv1a+nznX4k4OBrJ3I6yQUma27oQQfwL2Rs2nAGullN7Zwj6QUtqMKwghagOHgYZSyiNCiM+AZCnle3mlq9DfFKSUjrqkHAJUpJQv2vucbd/CbJ/XAGueNH1FKlKRivTfUkHeFKwVwIo8jrdwdEwIESOECLK+JQRhfzrtXeCulPJRv/lPKGMPeep/1o6zSEUqUpGeNVmkOd9/T6kNQG/r597A+pwBpJTRwB3r4mGA5sDFx0X8r8ZcFKlIRSrSP6l/cFHaLOAHIUR/4DbQHUAIEQysklK2s4YbAXxjnXn0N9D3cREXVQpFKlKRilRI+qcwF1LKeJSWf879kSjTah9tnwZqFyTuf3Wl0Hd94fWOratTeAO6bWZdKbS4lrsVnt/zy/PzZwifX11YkmuW3BOr14R8LVPJl74LLjxr3L7fPXU3QKbizHmvvC6I0gvx2bQxrPB8kKFwB4dT7u4utLgKQ88yviK/+ldXCkUqUpGK9E/q3wDEK6oUilSkIhWpkPS0+IpnQf8nKoV+Hw6kRkRtMvQGFo9bwA07HPihc0ZQ/oVQhBBE3rjHkrc/Iz0tHTdPN4bNHYnHc8URGi1otWC2YNjxB4Zf/2MTh7ZOQ5x79gOLBLOZtNWLMV9W2H/C1R3XYeNRlyrLV2mSWW/Po3nnCOo1q4tBb2CmA4b/I42aOpy2r7ShTUVlhbCbhxvvLppE2RIBqDzdUOm0WNLSSfxhK/ErfrQ5V1euBEGzxuBcJZTY+WtJ+OKXzGM+fbrg3aM1UkomXLrJp+M+pd/kftSJqINBb2D+2/Pz9IwY8tEQWvZoyUvPKatK67Wsx5vj3sRiseAU5ILx1BYscXc4cDWSOZtOYJGSrjXL069JFZt41uy/yKazNwGFXXQjNpldE7vh5ZrVPdb3w4HUjKiFQW9gybjPHNzH4ZSz3seoG5GZ99HVw5URC8bgF+xPUDFXhFaLRa8ndf0mUtZ+ZxOHa5vmePRSuEZSr+fBrAUYryrfFbT+GyxpaQq4zmSGthMKLW3Fgn1Rq9XE3U8gqGQA6XoDs8fM5er5aw7zf8TUt2jbozXtKnUC4JUh3WnRtTkWJGq1mrIVSxN9N4a0h2lMHTPbbhl799OJ1KhXnYdWn4hpY2Zx9cJ1SpcvyZRPJ+JTrQKGHVvRVq0OKhXp2/4g/cccZb9eQ1zf6K8wjcxmUlcsxnTxHGh1eM1eqPxu1GoyDuyBHe8XmgeCxrcs5pT7DgF7BfVmeFr9G94UCn1KqhBCCiG+yratEULECiE2Wrf7WLdPZ/t7XghRRgihF0KcsoKbjgohelvPeVEIcSjH92gezdXNKz01ImoRVDaYEU0Hs2zSEgZNG2o33JqPVzGu7SjebjOSuMhY2vRWuDjdhnfn5sUbpIwbCE5OWBLiSB7dG12jZqhKlLaJw3juJClj+5MybgBpn8/Gbdj4zGMu/YZjPHWU5JG96NtyEP5BfpQoW4LXGvVi7sT5jJ05yuE1VKpWEXcv24VNXft05tZft7jRZSRIEE46rncajmeHpuhCS9qENSemEDN1GQmrfrbZrwnwpVivTtzoOoob7YehVqvpM6EPIWVCGNBkAAvfWcjw6Y7XCFaoViFXuk4fOM1brd9iRNsRZBxdj7ZOJ8wWCzM3HmfJmxH8Mrw9W87d4vr9JJvz+jR6nh+GteOHYe0Y2aI6tcoUt6kQlPsYxIimQ1g+aQkDHd7HLxjfdjTj2oyyuY+te7Xj7tU7TGw/ViG56bREvzYI11bN0JS1vY+myCjuDx5DzGsDSf7ia4pNtl1iEzvkbWJeH0xM72GFmrYBrYbw1WffEFavGn0iBvDJxAWMmTnSYf5XrFYR9xwL3r5f9iMDWw+hd6uB7N60h5SkFF6q/xqzJn7ChJljHMa1eNoyercaSO9WA7l6QWkEJCem8Ol7i9D/+gO6Bk1I/mACiUN749SkOeqSOcr+6ZMkDe9H0ogBPFwwG/eR1rJvzCBp8hiSRvQnaUR/tLXCGTlyQKYHwltvvcPChdPtpql585epW7ctdeu25ciRE6xfn7meNdMDQRr1ds99pC7tWrJs/rQ8wxSmitDZ9pUKVBVCuFi3W5IbaZHdDyFMSvlo7ux1KWUNq+fCq8AYIURfYC9QQghRJlscLYDzj5Z6O1KdlnXZ/fMuAK6eupJPDrxTJgKyRIWSnDtwBnVoZSx3b6Hy9kG4eWDcvxNdnRx8+vRsBdTJOQsj6eKK5vnqZOxQMMImo4najWux9ScFgXDx5CXcHTD8VSoVQ98bzLJptmtcpJS4uLvgUq0ipqhYzA+SQW8g+Y+9eDS3Xf1rTkgi/dxVpCn3oKjQqBHOOlCrcHJxIqRcCDt+VgBtj/OM6De5H1/M+MI2C9KyMfo1OkBy/m48JX3cKeHjjlajpvULpdl9OYcJTTZtPneLNi/YPnTqtAxnT+Z9/Au3AvL8H+VXaFgFTDH3sSQlg8FA2vZduDRtYBNHxtmLSCta2XDuIuri/g7TWphpA6jfqj7JicmYTWYunbyEzHgMbwAAGyNJREFUm6c7Pg7KxZB3B7J8+spcxx6pVdeW7N6kkGEunLyEu5dbvn0iAB7EJ3LpzBVUXt5YkpOwREeByYRh70609Wzpp9nLvnB2sX3kPTqm0SDUGho2DC88DwRL3gP9BfFmKAxJKfP996zqv7V4bTMK1gIUwum3eYS1Kynl3yiroEdKKS3AjyhWeY/0an7i9Q30JT4yi8yZEB2Pb0BuDDDAsLkjWXV8HSGhIWxao5jD3Lp4k7pt66Py8c8EjKl8/bEkxCJ8cz8stOGN8Fy4DvfJs0hdohjLqQOCkcmJuA5/B4+5K5kw922KBxfnfrZ0xUbF4meH4d+tbxcObDuYC9D2y+rfKF2hNCVXfYRLWGVipi0HKTFGx6FxcH05ZYqJJ/6LX6iwZy0VDn5DanJqZloeKS46zm66OvbpyBEHnhH1W9dn+c7l6Bq/hvHoBu6n6AnM5kIX4OnK/WT7UDR9homD16Jo8bzt245PoK8Nzz8+Og6fPO7jyuNrCQ4twWbrfdyydhMhoSWZtOY9nF54nsRPloCUmGNiUfvb904AcO/clvSD2XAdUuK/eA4B65bi1rV9oabtpxPfEdGhKT8s/ynzoREXZT//u/btzMFth0hwQCp1cnYiMKQ4e7Zk4cJio+Ly9In4avsqRll9IrJLuLgiU7PIppa4WNS+uePR1W+M97J1eHw4i9QFs7MOqFR4LVqFzze/YTx9HK1W+0x5IBSmLFLm++9Z1X+rUvgOeFUI4QxUA47kOP5Kju4jl9xRAAouu7L187dYDXeEEE4oc3F/dnBelgrAW/98/EIGhffh7rW7NOzYGIBfl/6Em6c7Lr2GoC5ZBvONq2A2P4ooVxzGo/tJHtmL1Dnv4tKzv7JTrUZdriKGretJGT+Q9LR0SpQNznVuznT5BvjyYocm/PJlbs/f8BfrcO3CNaLeXUTy9oMEvD8UlbW16RB0n0MqT3c8mtfjWrO+XG34Bs6uznZNg+x7RjRiw5oNduM9tPUQg5sNJuPAd2iqRthNjiPo7d4r9wgr6WfTdeQwfB73cXB4X+5du0MD630Ma1qDmxdusPydz9Hv2k+x8SMQbq55xuNUKwy3Tm1JWpzVGo8ZMIqYN4cQO2oS7i935rnw5wstbS/XepWzR8/x8sBuuLq7OozLN8CXpu2b8Mtqx0CuRq0akJL0kNQU28rXXrKWzlzJq01606/9UDy9PXlzWE/bAPb8Jux8Z8ahfSQO6UXK1Cm4vNkv64DFQtKIATzo3R1Nxefw8MjNePr/6YFQmCp6U3AgKeVZoAzKW8ImO0Fydh856hjMLI1SymOAu3XJdlvgsJQyVzNVCDFo0qRJty5fvpw2feMcHsQk4Buc1aL3CfR12LoCsFgsHPx9H/XaKl0K+od6Ph+/kNQFU7HERCI8vTHfj1LeHBJyY6AfyXTxEZ/eC0t8LJb4WDTlK+ExbxX1mtdFq9NSPFu6/IP8ic/B8K9QNZSQMiH858BXfH/4G5xdnPjP/nUAtHulNXs37ccUHYfaww3j3Rh05UqiDfTDlMf1ZZdbgzCMd6PxbPv/2jvz8Kiqs4H/XkIIYZVNQJAt2GJRK4uKH3wgolYrVRQtxaXiV0UrtSLgUm2pa6MgOyqIKGApLigWaUEqiwhlVxbZLGVTENkxYggkeb8/zk1yM5lM5kxuFjPn9zzzPHfOnfvOOzNn7nuWd+lKy/dGk3JeColVEmnQOE+v+o3qF9ArpW0KjZs3ZvKSyby+7HWSkpN4dcmrBb/Lg3uQGnVoWO8M9h/P2wj85tvvaVAz/Dhg3ue7ufqCFgAktL6IpKvuIemqezjyzZF8+fzrNaofxe+4lE7XmKW07jf3YOW85RzZfxipUZ3MfftJbH42CQ0bkHWoYJ2BxNatqPvHwRwaMtQsNeXI9V5b7YpuJNStw8DxQ4qt280Df0WHHh2Z9OEE9u7aR9qx72jm7QvVb1y/QG2Hc9qm0KTFWUxfOpUZy98gKTmJvy6dAkCvO65j0ocTePT5Qez8YhcNfXUiGjSuz6Ewqcv9dSLmvDWXn7Rrk++8fn8CqZ53I69UvwHZhyP0/U0bSGjUBKmVl0gv6dpe1HpuNAlNm5GUVMW6BsLcuXk1GXJqIGzbtgxJqk5CjfpIlSLLBJQKpVVkpyQpydxHs4EXiGHpyEc7YIvv+ZuY2UKhS0eq+kpqamrzNm3aVHu858Osmr+Sy3qb1MPneDUQwuWBb9Q8r5N2vOJi9v7XrHlXq1WdyomVydq+jYRWPyJzh6mpm9jlck6tCclP3ygvJXBCy5z89MfRY0fIPnSA0xvWkjbkLv713kdsXbeNn91k0iv/pP25nAiTw3/FgpXc0O5m+nS6lT6dbuVkega3dDElrL/Ze4AOXdqRvvELqrQ6myqtz+b01wepdW1X0hasiOa75fTXB0m+sA3H3v0XO6+7nw3LN7Bx5UZ69DaBkj9u92NOpJ0osES0euFqbut4G3d2vpM7O99JRnoGd3W9C4DGvu9R6jRCKiXQ9swa7DmSxt6j33E6M4sPN+6mW5uC6ZPTTp5i7a4DdG/TFICs7avJmD+RjPkTWT1/Bd1yf8fC8/k38uXz73DFRbm/46G9Bzm/8wVsX/8fEls0o3LL5mR+c5BqV3YnfUn+3zGh4ZnUG/YEh/+cSuaevL0PqVoVqWaM2YkPPiRz39e8/NC4Yuu2ddVmPnn/Y+7+2b2sX76eJi3OYt/urzm3/bmcSDtRwMCsWLiK3u370PfS2+l76e1kpGdwW5d+ALw/dTYDbxpEdlY2M1+fxTVeH2tbSB+D/HUiul3dhf9u3ZnvfPbhQ1SqVZtKDRtB5cokdb2c0yuX5XtNpca+vp/i9f1vjyO1aiPVa5Dxj/c5Pvg+svbtZf78xYHVQNCME2R9dwg9VbwaDUFREZaPStIl9TXguKpuFJHLbC/2NpVfAMb5mmdgEj/VxtRvLpJPF66hffcOjF8ykYz0DF7y5YF/bMpQXn54PMcOHuV3IweSXCMZEWH3lp288vjLADRt3ZT7Rz5IrSqZZO37ksotUqg1ZiqnFs4l+8tdVLnKuAKemj+bxE5dSbrsKrOheyqD70Y+lfte6ZPHUv2BP0JiZVpv2U/qoGHc/fD/MWPZG2SknyR10PDc1w6b9heef2hEgRG6n6mj/8pjox6mZc9ugCJAizdf4NjM+Zzavocz+ppI92Mz/klC/Tq0nDWGSjWqQXY2dfv1Ysc193By/Ta+nbeUlu+PRbOy+PrzHUx8YiL9/9SfyZ9MJiM9g1FDRuW+55NTnmTMI2Mi1ozo/PPO9Ojdg8zTmVRpWIVTy2dSOaESj17bkd9OW0R2tnJ9+1a0PvMM3llt3CNvvugcABZu+YpLUxqRXKVgt/x04Vrade/IuCUTOJWewYtD8rrFH6b8iQkPv8ixg0cZMHIg1Wokgwi7t+xikvc7zhz7NgNG/J7h/xyV+301fHUM382eS+aO3VS/0bj6nnhvDrXuup2E2rWo84jnEZaZxTd33EelenWoP+xJwGzQn5i3gHUfmyI4Qeg2+aNXEGDDqo289ME4Mk5m8PygF3JlpU57lhceGhmxXwB0uboLK5esYfHcT+jYpT3vLPsrGekZPDMob51/xLRUUr06EU+Mf5w6dc8Ar07EsEdNauu6Derw+tyJVK1dDUQ4Y9J0sg8eJGP+HLL27CLpGtP3M+bOpkrnriRd/jPIykQzTpH2vPmeKtWtR41Bj0GlSiDCqaWLeeaZUYwe/XSp1ECwqc0QBOW59nK0lEQ9he9UtUZI22WYegk9vXoIw8nvkXQfpgbDFmArUBVIA15W1ddDZK0HtqhqIQVy87ip+XWBfbhJHYNLc3H9ioTAZE2sFlyai8GFFUeNkXeHXxKYrCDTXIw8s3jlIP0MOhBcDYRDWcGNdk9qZmCy5lwY7FJHkwU7i35RlASZ5iKxfqti5z9JTm4e9T0nPX13cPlWAqQk6ikU+Jeo6mJgsXc8hcLrIRS24eyX9dOYlXM4HI4SpDxvIEdLXEQ0OxwOR2mQXY43kKPFGQWHw+EICDdTcDgcDkcuP3yTgF2wRUV9AP2drIqhm5NVMWSVd90q8sPVaDb0d7LKVJ6T5WSVtLygdauwOKPgcDgcjlycUXA4HA5HLs4oGF4p+iVOVgnKc7KcrJKWF7RuFZbAI5odDofD8cPFzRQcDofDkYszCg6Hw+HIxRmFcoqIJIpIOxEpvE5hOUBEyiQAUkRqRTjXrDR1KSlE5KII524vTV1KmiB/MxFpGJSseCTu9hRE5MZI51X1PQtZvy5C1jQLWROAcaq6SURqA8uBLKAuJsNs1HUpRORuYLGq/kdMWbDXgN7ALqCfqlqlHBWRD4DfqerukPYrgNGqep6FrLGRzqtq4ZXq88v5VFXbe8cLVLVHuHOxIiL1gK7AHlVdG8P1lTHFoHIq1mwB5qlGn75URDYAy4A/qOoxr+084CXgiKr2ikGvM4EBQFtMAO5m4CVVDV/lxk52feCwxnBTCeI388naD2zEpNp/V1WPByE3XojHNBczgXXeA/IX7FQgaqMAhBvJCfALoAkQtVEA/ldV7/WO7wS+UNVeItIIU/PapljRA+Rlou2LKYnaElO0aAzwvxaywBQ3WiQik4FhQANgNNAMuMNS1r3A58DbmHTpsaYP9l8XWo3eWqaIzAEeVdXPRaQxphTsGiBFRF5R1dEWss4CFgFfA595+vQERohId1XdF6Wo9sBDwGci8jRwPqYM7WBVnROtPj69OgN/w/SNaZ5e7YGVInKrqi6LcHmorE7Ac8AR4GngDaA+UElEfq2q82zVs3x9JJoAV2CKcaWKyHLM/2e2Fl7l0ZFDWYdUl/YDuAFzk1sD/AloHZBcAW7DjFDeAi6wvP4z3/E/MCP6AueilLXOd/w34AHf809j/Hy1gYnAdmA3JkJUYpBTD2MYFgH/Au4C6sQg59Nwx7F+RmCT7/gxYJp3XBPYYClrCjAwTPvvgakx6PYQkA18BZxVjD66AmgXpv1CYKWlrDXAVcDNwFGgk9fexra/etcdAMYW9ijGZ64CXI8xCvuB6bHKipdH3M0UVHUWMEtEqmM6ywhvqeBxVf3YVp63TNAPGAysBG5S1W0xqHZMRHpiig91xqss58kvss5ECNneaPco0AN41nfOVlYOPwEuBlYBHYGGmJnmaRshqnoYmABMEJEmmJnMJhF5RFXfsBB1pogMwhjjnGO85w0Kv6xQ/J+jBzDJ0zdNRGzzIXdS1X6hjao6VkSi7hsikoJZKsoCzsUsRy0RkWc1pPhUlNRS1c/C6LVORGpayqqsqvM9PZ9S1RWerK1mxdKadMB6ma4oVPWUiGzGLN91wPRjRwTizij4OAkcB77FLINUtRUgIgMwSzULgKs1ZM3dknswo6JGmFHmfq+9B2bmYMNQzEguATNl3uTp2w3YYauYiLyKWWa4T1WXewb1SWC9iAzMuTlYymyPMQhXYpbHbG8IkzCj+NBjgFdt9QG+FJH7MaPx9sA8T89kINFSVqQlCpvyah9ilrRmes+3icjbwEgRuUtVO1vqJSJSR1WPhjTWxd7pxG8oQz9vLBuVh1V1agzXhcXbuO6D6WPVMasD16vqlogXOuJyo7k7pqNcDHwEvKmqa2KUlY2Z9h4k/x9BAFXVC4qpbsx4M4ya/huAiFQDElQ1zVLWg5gpfFZI+/mYTcqo9yhE5EnM+voWzB/VavO1pPA2YJ8CGgMv+kbB3YEOqvpCpOtDZO0AhoQ7BQxT1ZQo5dRQ1bC1Q0XkClX9KFqdvGv6A3d7uuU4G3QAngdeU9WJFrKygBOYz5RMnrEToKqqWhlSEVmhqp3CtHcGblHVARay/o3ZV5gJzIj1/x2vxKNRyAY2AEsxN/J8X4BG6f3iyboXM6IM9yX2UdVhFrLGhchR4BCwSFWXRiunENkCdAduAX6hqtYue0F5rXjf/w7yRpc5n9nKkIpIWyBFVWd7z0dh9j0Axqulh1WQiEjEpR1VvbMYslMwg5pfqYXXl+/6nsDDmN8RYBMwXFU/iFWnoBGRCzF99ZfATuA9VR1ncX03YInG280tIOLRKPQjwvTWZgrrjZY+Bm5X1b0h56xc7EQknBdPXcwf4y218H7xybwE8+e6wZM1ALOcdDTihQXl+L1W1pLntXIHYOu10jzS+WiX4Dw32VRV/bf3fDPGcaAa0Fst3TU9eZH6xXU28iK8T8MYDGljzFLILRhPslTMjXJjEDqVB0TkRxhvob7AYYyzxhBVjdhfIsi7A7Ox73cJHqsWbuLxStwZhSARkc8wG4FDgUGq+o7/nKq2C+A9koF/28gSkWcxxmQPxutiFrBGVVvGqMMK4Lehm5TeiG6iql4Si9wQWQmY0e/0KF+/RlU7+nXMWX4QkaWq2sXy/btFOh+LE4JPdm1MnMgtwLmq2iTK6+7G3CSbYlx43wb+XozfMXQ2mg+bWXLQeDPIT4DfqOp2r22HqraKQdavgQeBQZhlspxBzHBgjDMMkYm7jeaAR4SqqpNE5GNguoj8HBigqt9Heg8bVDU9Bm+O/sA24GVgjqqeFJHi6BOY14qYSOQBmDXf2Ri31N9h1rnXAVEZBfJvLBOyHm0dBe6/6YtIA6/toK0cn4xk4DqMIWiP0bcXsMRCzIuYIMZbctbFi/k7lue19d6YmcIiEZmH2W+KNXbhPuAGVd3la1soIr09uc4oRCDujAIQ9YZhtKjqFyJyKfAMJtAoYqRztHibxbdjPGJsaITxIe8LjBaRRUCyiFSOcVM3SK+VNzCusssxMQoP4fmSq+q6SBeGsE9ELlHVlSE6dcIExVkjIn8G7sfcjCqJSCYmyvwpSznTMdHQ84HxwEJgu6outlSpKeZmOVJM6oa3sfeE8vNjVX2sGNeXGCGu4r0wI/2GIvIyMMvSw61WiEHIeY9dEiE9isMjmmCGeHkAnS1fXyBIB7gMs5GaZikrDeMem+Z7fIO5ERQnYKkqcBPwrifvbzHI6A+sBrphRrw1vc+5ErjHUtZG33ECxkDUjEGnizGbkH/GRJD/AnjCa7s4BnkPYmYtLX1trTBuoQ9aylqPcWYYApztte2IQSd/gF5TT95azPr4X4ojr7w9gClh2upiXLUXWspaG8s59zCPuNtT8Nauf4lZvpinJq1BT0wUa7Lard33UtX3w7TXwdwsnwtK7yDwlnpu1Bj8wYPyWgndgLfdkA+R1ZD8HlGbMDf2vmrhwujJ+gy4UlUPhbQ3AObb9AvvujaYpaM+GLflNsD5mhd/EpVO4d7X25Ttq6pPWuq0HmPMwy7LqOoRG3lBUpx+EEbW95jI+wKngFaqWj2I96moxKNRmAKcjYnMvQSTsuFSTJBQgRt8aSIFk6htBj5UyyUfyYvuDYuqjoxNw+Lj82+H/D7uOS6p1tN7EWmHWSrLcWF8V1XHW8r4XAtx8Yx0LkrZHTEG4ibgK1X9nyiv+woo9Ley/R1FJAMTMR/OKKjGsKkbFCKyFfMbFmawonYxDsrDLV6Jxz2Fjpi8RNkiUhUTC9DaZgRXEkjhSdRGil0SNci/CXsPJmdRDrFksBwa4bSq6tPRylLVBNv3D0chLoyiqt1jFHkqxnNFomaTeI2IPIoxXNGSANSgkJt4DKpstp3xlCJNgBEU/lkvt5CVrKpbAUQkSVUzck54e07OKEQgHmcKgS1fBIk3g1mnIfEIIvJ7TEStbTbSnOuL7RorIoPDNFfH5Geqp6o1iiM/FoJ0YfSu9c9g8p3CMkK3EA+rAZg9gfWqen2UcgLtm5H6QizxE0ESlAu3J8ufVr1c/t/LM/E4U2gjJk89mD98iu85WnapKQJJohaGYlt9VR2Rc+ztSzyASe/9JmZ0VxYE6cIY2AzGozAPq15q52EVZDppMGnT84SHxE9gjFhFQAo5DvfcEUI8GoWfYjJ8fhnS3pwYXRkDIqgkaiWC5346CLgVmAq0V8vI6CDRYF0Yg6aVqp4PICaZ4CGgmVrmnMIkQwwMVZ0SUPxESfCI/4mIJALnAXtV9YClrNB0MYWdc4QhHo3CKOCx0M0mz8tkFMa1sSyoLeGrwglgtfkqIhvJ6/yt/TMhsJ8Nichw4EbgFYwHTdgkbWWBqp7ABLxN9wzXzcCjmBiBsiI3DbeqZonIzhgMQuDeQAHGT5QEN4rIXg1TeVBErCoPAk3FVPgT3zHe84oyGyox4nFPIZKXycacEV5pIwEmURORc4gwG8pZg7eQlw1kAJmEzwbrAoJ8lISHVUB6rfd0mIbJp/VlcfZhgkRENqlqW+94IHCZ+ioPWrqKR9x/i8UlO56Ix5lCpLoJsRagKTY2N/0oCHQ2pKq2UctxTcD7E4Ghqj/1xU98JCIHgJoi0qisve/I7+F1JfAOgKrut03z4m76xSMejcJqEblbVSf5G0XkN5RA5adoKSI1hqpdVbIWqrohtFFV14hIC1vdHBUHz1VzKDDUFz+xSkSijp8oIQKrPCgisyOd14Ay3lZU4tEoDMRsUN5KnhHoiPEOuaHMtIKLwrQJZlTfBOPREi3lcjbkKF8UI36iJAiy8uClmKXTGZhULM7jyIK421PIQUxFrZy9hU2qurAs9fEjZr58K8YjYzPwbLiRf4TrZ2DyxYSbDV2lqn2C1NfxwyCo+InSRkzJ16jriXipbK7EBDZegDEqM9QrS+uITNwahfKIN1XuBwzGjHBSVdU6RsHLCTQLs05bYDZUDtaPHWWAiPydvPiJHkAdTJ94wDJ+olQRkT2q2izGa5MwxmE48JRaVHCLV5xRKCeIyABMUNgC4Lkg8rOU59mQo/Txe9d5o+lY4ydKFRH5UlXPtrwmCbgWYxBaYGZGr2lIhURHQZxRKCd4bp8HgIOEd/ssq0hrRwXhh5rywXamICJTMYOhucCbqvp5iSlXAXFGoZzgMjs6SpryGj/h6ZZG+GhjwSS4i9opxhtg5XxOF1djiTMKDkecICKJqnq66Fc64pl4dEktlxQxUnKjG0cQrMTkO3I4CsUZhXKCqtYs+lUOR7Fw/vqOInFGweGIHxpEqsqnZViRz1F+cEbB4YgfIlVyczgAt9HscMQNPxQXVEfZ4rJfOhzxg5shOIrEzRQcjjhBRM7CJL5rDWwEJqtqZtlq5ShvOKPgcMQJIvIWpircJ8A1wG5VfaBstXKUN5xRcDjihJDcR5WBVW6PwRGK21NwOOIHf+1ot2zkCIubKTgccUJ5zn3kKD84o+BwOByOXNzykcPhcDhycUbB4XA4HLk4o+BwOByOXJxRcDgcDkcuzig4HA6HI5f/Bw1GqNpmiy6ZAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cols = df.columns\n",
    "data_corr = df.corr()\n",
    "sns.heatmap(data_corr, annot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. **如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。** \n",
    "\n",
    "> 1. PCA降维（特征层面）\n",
    "> 2. 加正则项（模型层面）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. **当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 ，并重新训练最小二乘线性回归、岭回归、和Lasso模型。** "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>RAD</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "      <th>MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.00632</td>\n",
       "      <td>18</td>\n",
       "      <td>2.31</td>\n",
       "      <td>0</td>\n",
       "      <td>0.538</td>\n",
       "      <td>6.575</td>\n",
       "      <td>65.2</td>\n",
       "      <td>4.0900</td>\n",
       "      <td>1</td>\n",
       "      <td>296</td>\n",
       "      <td>15</td>\n",
       "      <td>396.90</td>\n",
       "      <td>4.98</td>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.02731</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>6.421</td>\n",
       "      <td>78.9</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>396.90</td>\n",
       "      <td>9.14</td>\n",
       "      <td>21.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.02729</td>\n",
       "      <td>0</td>\n",
       "      <td>7.07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.469</td>\n",
       "      <td>7.185</td>\n",
       "      <td>61.1</td>\n",
       "      <td>4.9671</td>\n",
       "      <td>2</td>\n",
       "      <td>242</td>\n",
       "      <td>17</td>\n",
       "      <td>392.83</td>\n",
       "      <td>4.03</td>\n",
       "      <td>34.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.03237</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>6.998</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>394.63</td>\n",
       "      <td>2.94</td>\n",
       "      <td>33.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.06905</td>\n",
       "      <td>0</td>\n",
       "      <td>2.18</td>\n",
       "      <td>0</td>\n",
       "      <td>0.458</td>\n",
       "      <td>7.147</td>\n",
       "      <td>54.2</td>\n",
       "      <td>6.0622</td>\n",
       "      <td>3</td>\n",
       "      <td>222</td>\n",
       "      <td>18</td>\n",
       "      <td>396.90</td>\n",
       "      <td>5.33</td>\n",
       "      <td>36.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      CRIM  ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD  TAX  PTRATIO  \\\n",
       "0  0.00632  18   2.31     0  0.538  6.575  65.2  4.0900    1  296       15   \n",
       "1  0.02731   0   7.07     0  0.469  6.421  78.9  4.9671    2  242       17   \n",
       "2  0.02729   0   7.07     0  0.469  7.185  61.1  4.9671    2  242       17   \n",
       "3  0.03237   0   2.18     0  0.458  6.998  45.8  6.0622    3  222       18   \n",
       "4  0.06905   0   2.18     0  0.458  7.147  54.2  6.0622    3  222       18   \n",
       "\n",
       "        B  LSTAT  MEDV  \n",
       "0  396.90   4.98  24.0  \n",
       "1  396.90   9.14  21.6  \n",
       "2  392.83   4.03  34.7  \n",
       "3  394.63   2.94  33.4  \n",
       "4  396.90   5.33  36.2  "
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "df2 = pd.read_csv('boston_housing.csv')\n",
    "df2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 506 entries, 0 to 505\n",
      "Data columns (total 14 columns):\n",
      " #   Column   Non-Null Count  Dtype  \n",
      "---  ------   --------------  -----  \n",
      " 0   CRIM     506 non-null    float64\n",
      " 1   ZN       506 non-null    int64  \n",
      " 2   INDUS    506 non-null    float64\n",
      " 3   CHAS     506 non-null    int64  \n",
      " 4   NOX      506 non-null    float64\n",
      " 5   RM       506 non-null    float64\n",
      " 6   AGE      506 non-null    float64\n",
      " 7   DIS      506 non-null    float64\n",
      " 8   RAD      506 non-null    int64  \n",
      " 9   TAX      506 non-null    int64  \n",
      " 10  PTRATIO  506 non-null    int64  \n",
      " 11  B        506 non-null    float64\n",
      " 12  LSTAT    506 non-null    float64\n",
      " 13  MEDV     506 non-null    float64\n",
      "dtypes: float64(9), int64(5)\n",
      "memory usage: 55.5 KB\n"
     ]
    }
   ],
   "source": [
    "df2.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>RAD_1</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   RAD_1  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  RAD_24\n",
       "0      1      0      0      0      0      0      0      0       0\n",
       "1      0      1      0      0      0      0      0      0       0\n",
       "2      0      1      0      0      0      0      0      0       0\n",
       "3      0      0      1      0      0      0      0      0       0\n",
       "4      0      0      1      0      0      0      0      0       0"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据分离\n",
    "X = df.drop('MEDV', axis=1)\n",
    "y = df['MEDV']\n",
    "log_y = np.log1p(y)\n",
    "\n",
    "# 离散型特征编码\n",
    "X[\"RAD\"].astype(\"object\")\n",
    "X_cat = X[\"RAD\"]\n",
    "X_cat = pd.get_dummies(X_cat, prefix=\"RAD\")\n",
    "\n",
    "X = X.drop(\"RAD\", axis = 1)\n",
    "\n",
    "#特征名称，用于保存特征工程结果\n",
    "feat_names = X.columns\n",
    "X_cat.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最小最大缩放去量纲"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 最小最大缩放去量纲\n",
    "min_max_X = MinMaxScaler().fit_transform(X)\n",
    "min_max_y = MinMaxScaler().fit_transform(y.values.reshape(-1, 1))\n",
    "min_max_log_y = MinMaxScaler().fit_transform(log_y.values.reshape(-1, 1))\n",
    "# min_max_X = StandardScaler().fit_transform(X)\n",
    "# min_max_y = StandardScaler().fit_transform(y.values.reshape(-1, 1))\n",
    "# min_max_log_y = StandardScaler().fit_transform(log_y.values.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [],
   "source": [
    "fe_data = pd.DataFrame(data = min_max_X, columns = feat_names, index = df.index)\n",
    "fe_data = pd.concat([fe_data, X_cat], axis = 1, ignore_index=False)\n",
    "\n",
    "#加上标签y\n",
    "fe_data[\"MEDV\"] = min_max_y\n",
    "fe_data[\"log_MEDV\"] = min_max_log_y\n",
    "\n",
    "#保存结果到文件\n",
    "fe_data.to_csv('FE_boston_housing2.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>MEDV</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.422222</td>\n",
       "      <td>0.666856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.368889</td>\n",
       "      <td>0.619696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.660000</td>\n",
       "      <td>0.833335</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.631111</td>\n",
       "      <td>0.816001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.693333</td>\n",
       "      <td>0.852567</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO  ...  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  \\\n",
       "0  0.208015      0.3  ...      0      0      0      0      0      0      0   \n",
       "1  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "2  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "3  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "4  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "\n",
       "   RAD_24      MEDV  log_MEDV  \n",
       "0       0  0.422222  0.666856  \n",
       "1       0  0.368889  0.619696  \n",
       "2       0  0.660000  0.833335  \n",
       "3       0  0.631111  0.816001  \n",
       "4       0  0.693333  0.852567  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2、确定模型类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取数据\n",
    "df3 = pd.read_csv('FE_boston_housing2.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(404, 21)"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = df3['MEDV']\n",
    "X = df3.drop(['MEDV', 'log_MEDV'], axis=1)\n",
    "feat_names = X.columns\n",
    "\n",
    "#将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 随机采样20%的数据构建测试样本，其余作为训练样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 最小二乘线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>RM</td>\n",
       "      <td>0.452377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZN</td>\n",
       "      <td>0.129239</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.103221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B</td>\n",
       "      <td>0.078899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.059660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.037664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.030071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.027465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>INDUS</td>\n",
       "      <td>0.013818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.001228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008698</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.040970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.055736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.081501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.113548</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.151553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.187898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.221874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.386249</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.476675</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns      coef\n",
       "5        RM  0.452377\n",
       "1        ZN  0.129239\n",
       "20   RAD_24  0.103221\n",
       "10        B  0.078899\n",
       "3      CHAS  0.059660\n",
       "18    RAD_7  0.037664\n",
       "19    RAD_8  0.030071\n",
       "14    RAD_3  0.027465\n",
       "2     INDUS  0.013818\n",
       "6       AGE -0.001228\n",
       "15    RAD_4 -0.008698\n",
       "16    RAD_5 -0.011517\n",
       "13    RAD_2 -0.040970\n",
       "17    RAD_6 -0.055736\n",
       "12    RAD_1 -0.081501\n",
       "8       TAX -0.113548\n",
       "4       NOX -0.151553\n",
       "9   PTRATIO -0.187898\n",
       "0      CRIM -0.221874\n",
       "7       DIS -0.386249\n",
       "11    LSTAT -0.476675"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性回归\n",
    "#class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 1.使用默认配置初始化学习器实例\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 2.用训练数据训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "# 3. 用训练好的模型对测试集进行预测\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 模型评价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is 0.6939789810509474\n",
      "The r2 score of LinearRegression on train is 0.7549146436868177\n"
     ]
    }
   ],
   "source": [
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "print('The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))\n",
    "#训练集\n",
    "print('The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#在训练集上观察预测残差的分布，看是否符合模型假设：噪声为0均值的高斯噪声\n",
    "f, ax = plt.subplots(figsize=(7, 5)) \n",
    "f.tight_layout() \n",
    "ax.hist(y_train - y_train_pred_lr, bins=40, label='Residuals Linear', color='b', alpha=.5); \n",
    "ax.set_title(\"Histogram of Residuals\") \n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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8FlwQjJF2bp1KwMHDmTbtm2MGjWKuLg4t0MyplQl/dd3ruCF3Rq5x+PxMG3aNNq0acOhQ4f46KOPeP75563anAkLJfVgWorIj77Xgncm74++16qqlzoenQHg/fffp1u3bsyePZvLL7dde034KKlkZnQwAzEXWrhwIW3atKFOnTosWLCAatWq2dwWE3ZsdDDEFBSE6tOnD1OmTAEgMTHRkosJS/7MgzFBkpGRQVpaGrt372b8+PE88YRNQTLhzRJMiFi4cCH9+/endu3a/POf/6RTp05uh2RMhdktkssKFpvecsstDB8+nC1btlhyMRHDEoyL3njjDW699VZyc3OpXr06L774ItWrV3c7LGMCxhKMC44fP05aWhppaWmcPXuWo0ePuh2SMY6wBBNka9asoWXLlrz99ttMmjSJVatWccUVV7gdljGOcGWQV0Sexrv3dS7wNXCfqh5zI5Zg8ng8jBw5kpiYGNauXUu7du3cDskYR7nVg1kO3KCqLYBdwASX4giKr776ihMnThAVFcX8+fPJysqy5GIqBVcSjKouK7S+aQNQz404nKaqzJo1i5SUFCZM8ObQJk2akJhY0X3rjAkPoTAGMwRY7HYQgXb48GH69u1Leno67du3P59gjKlMHBuDEZGPgSuL+NEjqrrQ955HgDxgbgnXSce7syQNGjRwINLAW79+Pf369ePIkSM888wzjB071mq2mErJsQRT2r5IIvIb4A7gVi1hawNVnQnMBO+uAgEN0iF16tShcePGfPTRR6SkpLgdjjGuceW/VRHpjne/pd6qetqNGAJt69atjB07FlWlYcOGrF271pKLqfTc6re/CCQCy0Vks4jMcCmOCitcEOqNN94gOzsbwFY/G4NL82BU9WdutBtoBw4cYPDgwSxbtow77riDOXPmWEEoYwqx1dTlpKr06NGDXbt2MX36dIYPH269FmMuYgmmjE6dOkVcXByxsbG89NJLJCcnc+2117odljEhyZ6dlkFmZiatW7c+XwiqQ4cOllyMKYElGD/k5+fzpz/9ifbt23P69Gm6di3xCbwxxsdukUqRnZ3NoEGDWLNmDb/61a+YMWOG1Wwxxk+WYEpx5MgRvvzyS1599VUGDRpkA7nGlIElmCIcP36c9957j/vuu4/WrVuTnZ3NJZdc4nZYxoQdG4O5SEFBqGHDhrFr1y4ASy7GlJMl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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#还可以观察预测值与真值的散点图\n",
    "plt.figure(figsize=(4, 3))\n",
    "plt.scatter(y_train, y_train_pred_lr)\n",
    "plt.plot([-3, 3], [-3, 3], '--k')   #数据已经标准化，3倍标准差即可\n",
    "plt.axis('tight')\n",
    "plt.xlabel('True price')\n",
    "plt.ylabel('Predicted price')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 正则化的线性回归（L2正则 --> 岭回归）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is 0.6961684813070034\n",
      "The r2 score of RidgeCV on train is 0.7548524440445546\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#1. 设置超参数（正则参数）范围\n",
    "alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "#n_alphas = 20\n",
    "#alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#2. 生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#3. 模型训练\n",
    "ridge.fit(X_train, y_train)    \n",
    "\n",
    "#4. 预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print('The r2 score of RidgeCV on test is', r2_score(y_test, y_test_pred_ridge))\n",
    "print('The r2 score of RidgeCV on train is', r2_score(y_train, y_train_pred_ridge))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 0.1\n"
     ]
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "print ('alpha is:', ridge.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>RM</td>\n",
       "      <td>0.452377</td>\n",
       "      <td>0.449104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZN</td>\n",
       "      <td>0.129239</td>\n",
       "      <td>0.125966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.103221</td>\n",
       "      <td>0.099911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B</td>\n",
       "      <td>0.078899</td>\n",
       "      <td>0.079327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.059660</td>\n",
       "      <td>0.060075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.037664</td>\n",
       "      <td>0.036712</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.030071</td>\n",
       "      <td>0.030423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.027465</td>\n",
       "      <td>0.028356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>INDUS</td>\n",
       "      <td>0.013818</td>\n",
       "      <td>0.011491</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.001228</td>\n",
       "      <td>-0.001077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008698</td>\n",
       "      <td>-0.008646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011517</td>\n",
       "      <td>-0.011183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.040970</td>\n",
       "      <td>-0.039042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.055736</td>\n",
       "      <td>-0.055449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.081501</td>\n",
       "      <td>-0.081083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.113548</td>\n",
       "      <td>-0.110192</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.151553</td>\n",
       "      <td>-0.145910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.187898</td>\n",
       "      <td>-0.187369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.221874</td>\n",
       "      <td>-0.212619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.386249</td>\n",
       "      <td>-0.374867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.476675</td>\n",
       "      <td>-0.474603</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns   coef_lr  coef_ridge\n",
       "5        RM  0.452377    0.449104\n",
       "1        ZN  0.129239    0.125966\n",
       "20   RAD_24  0.103221    0.099911\n",
       "10        B  0.078899    0.079327\n",
       "3      CHAS  0.059660    0.060075\n",
       "18    RAD_7  0.037664    0.036712\n",
       "19    RAD_8  0.030071    0.030423\n",
       "14    RAD_3  0.027465    0.028356\n",
       "2     INDUS  0.013818    0.011491\n",
       "6       AGE -0.001228   -0.001077\n",
       "15    RAD_4 -0.008698   -0.008646\n",
       "16    RAD_5 -0.011517   -0.011183\n",
       "13    RAD_2 -0.040970   -0.039042\n",
       "17    RAD_6 -0.055736   -0.055449\n",
       "12    RAD_1 -0.081501   -0.081083\n",
       "8       TAX -0.113548   -0.110192\n",
       "4       NOX -0.151553   -0.145910\n",
       "9   PTRATIO -0.187898   -0.187369\n",
       "0      CRIM -0.221874   -0.212619\n",
       "7       DIS -0.386249   -0.374867\n",
       "11    LSTAT -0.476675   -0.474603"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 正则化的线性回归（L1正则 --> Lasso）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is 0.6953719445869473\n",
      "The r2 score of LassoCV on train is 0.7546505272258799\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#1. 设置超参数搜索范围\n",
    "#alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#2. 生成学习器实例\n",
    "#lasso = LassoCV(alphas=alphas)\n",
    "\n",
    "#1. 设置超参数搜索范围\n",
    "#Lasso可以自动确定最大的alpha，所以另一种设置alpha的方式是设置最小的alpha值（eps） 和 超参数的数目（n_alphas），\n",
    "#然后LassoCV对最小值和最大值之间在log域上均匀取值n_alphas个\n",
    "# np.logspace(np.log10(alpha_max * eps), np.log10(alpha_max),num=n_alphas)[::-1]\n",
    "\n",
    "#2 生成LassoCV实例（默认超参数搜索范围）\n",
    "lasso = LassoCV()  \n",
    "\n",
    "#3. 训练（内含CV）\n",
    "lasso.fit(X_train, y_train)  \n",
    "\n",
    "#4. 测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print('The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_lasso))\n",
    "print('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_lasso))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 9.422274692522746e-05\n"
     ]
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "            \n",
    "print ('alpha is:', lasso.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>RM</td>\n",
       "      <td>0.452377</td>\n",
       "      <td>0.449104</td>\n",
       "      <td>0.452181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ZN</td>\n",
       "      <td>0.129239</td>\n",
       "      <td>0.125966</td>\n",
       "      <td>0.120726</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.103221</td>\n",
       "      <td>0.099911</td>\n",
       "      <td>0.099135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>B</td>\n",
       "      <td>0.078899</td>\n",
       "      <td>0.079327</td>\n",
       "      <td>0.077388</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.059660</td>\n",
       "      <td>0.060075</td>\n",
       "      <td>0.060328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.037664</td>\n",
       "      <td>0.036712</td>\n",
       "      <td>0.041814</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.030071</td>\n",
       "      <td>0.030423</td>\n",
       "      <td>0.035717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.027465</td>\n",
       "      <td>0.028356</td>\n",
       "      <td>0.036489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>INDUS</td>\n",
       "      <td>0.013818</td>\n",
       "      <td>0.011491</td>\n",
       "      <td>0.000287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.001228</td>\n",
       "      <td>-0.001077</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008698</td>\n",
       "      <td>-0.008646</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011517</td>\n",
       "      <td>-0.011183</td>\n",
       "      <td>-0.002728</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.040970</td>\n",
       "      <td>-0.039042</td>\n",
       "      <td>-0.026297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.055736</td>\n",
       "      <td>-0.055449</td>\n",
       "      <td>-0.046790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.081501</td>\n",
       "      <td>-0.081083</td>\n",
       "      <td>-0.070050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.113548</td>\n",
       "      <td>-0.110192</td>\n",
       "      <td>-0.097387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.151553</td>\n",
       "      <td>-0.145910</td>\n",
       "      <td>-0.138506</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.187898</td>\n",
       "      <td>-0.187369</td>\n",
       "      <td>-0.183970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.221874</td>\n",
       "      <td>-0.212619</td>\n",
       "      <td>-0.203124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.386249</td>\n",
       "      <td>-0.374867</td>\n",
       "      <td>-0.369251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.476675</td>\n",
       "      <td>-0.474603</td>\n",
       "      <td>-0.477812</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns   coef_lr  coef_ridge  coef_lasso\n",
       "5        RM  0.452377    0.449104    0.452181\n",
       "1        ZN  0.129239    0.125966    0.120726\n",
       "20   RAD_24  0.103221    0.099911    0.099135\n",
       "10        B  0.078899    0.079327    0.077388\n",
       "3      CHAS  0.059660    0.060075    0.060328\n",
       "18    RAD_7  0.037664    0.036712    0.041814\n",
       "19    RAD_8  0.030071    0.030423    0.035717\n",
       "14    RAD_3  0.027465    0.028356    0.036489\n",
       "2     INDUS  0.013818    0.011491    0.000287\n",
       "6       AGE -0.001228   -0.001077   -0.000000\n",
       "15    RAD_4 -0.008698   -0.008646   -0.000000\n",
       "16    RAD_5 -0.011517   -0.011183   -0.002728\n",
       "13    RAD_2 -0.040970   -0.039042   -0.026297\n",
       "17    RAD_6 -0.055736   -0.055449   -0.046790\n",
       "12    RAD_1 -0.081501   -0.081083   -0.070050\n",
       "8       TAX -0.113548   -0.110192   -0.097387\n",
       "4       NOX -0.151553   -0.145910   -0.138506\n",
       "9   PTRATIO -0.187898   -0.187369   -0.183970\n",
       "0      CRIM -0.221874   -0.212619   -0.203124\n",
       "7       DIS -0.386249   -0.374867   -0.369251\n",
       "11    LSTAT -0.476675   -0.474603   -0.477812"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. **代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```\n",
    "最小二乘： 适用与特征之间相关性不强的数据\n",
    "\n",
    "岭回归： 适用与特征之间有一些相关性的数据\n",
    "\n",
    "Lasso回归： 适用与特征之前有很多强相关性的数据\n",
    "\n",
    "最小二乘线性回归中，目标函数只考虑了模型对训练样本的拟合程度，容易过拟合。​岭回归使得线性回归系数收缩，模型稳定。当输入特征之间存在共线性时使用较好。 ​lasso也会收缩回归系数。当正则参数取合适值时，使得有些线性回归系数为0，得到稀疏模型。 当输入特征多，有些特征与目标变量之间相关性很弱时，可能只选择强相关的特征，模型解释性好。 通过模型结果来看，不同模型中各个变量的比重不同。\n",
    "```"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.6.10 64-bit ('tf2': conda)",
   "language": "python",
   "name": "python361064bittf2conda473594d6dc1745d9a515d1b285416684"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
